首页 前端知识 vite vue3动态路由的引入与打包

vite vue3动态路由的引入与打包

2024-10-28 20:10:30 前端知识 前端哥 745 52 我要收藏

一、动态路由的引入

在本地环境中,可使用()=>import的方式进行动态导入,其中import内的文件路径可以使用相对地址和变量进行动态拼接,如:

routes.push({
                path: `/admin${item.path}`,
                name: item.name,
                meta: {title: item.title},
                component: () => import(/*@vite-ignore*/"../views"+item.path+"/index.vue")
            })

这样的话在开发环境中运行没有问题,可以正常引入文件,也可以访问路由,但是将项目打包成dist文件夹之后就会出现问题。

二、项目的打包及本地Nginx配置

现在我们保持上面的写法,使用npm run build命令打包,会得到一个dist文件夹,然后将项目配置到本地的nginx上。

dist文件夹结构

nginx.conf文件配置

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    #gzip  on;

	server{
        # 监听的端口
		listen       80;
        # 这里写服务器ip,本地所以写localhost
        server_name  localhost;

		location / {

            # 这里写dist文件夹存放的地址,或者如果将dist放在nginx的html目录下可以写html\dist
            root D:\dist;

            index index.html index.htm;

            # 这里是为了防止路由使用历史模式时刷新跳404页面的问题
            try_files $uri $uri/ /index.html;
        }

        # 这个api是指要监听的前端发送请求url的前缀,加^~是为了转发请求的时候在请求url中去掉/api
        location ^~/api/ {
            # 这里写后端的ip和端口
            proxy_pass http://localhost:7070/;

            # 这些是为了后端能获得访问者的真实ip
            proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 这些可写可不写,这里不需要
            # proxy_set_header Host $host;
            # proxy_set_header X-Real-IP $remote_addr;
            # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # proxy_set_header X-Forwarded-Proto $scheme;
        }
	}
}

生产环境中请求路径的写法是这样的‘

// request.js

//创建一个新的axios对象
const request=axios.create({

    baseURL:"/api", //代理的ip地址

    timeout:6000 //响应时间
})
// vite.config.js

  server:{
    host: "0.0.0.0", // ip
    port: 5100,  // 端口号
    open: false,  // 是否自动在浏览器打开
    https: false, // 是否开启 http
    // 跨域代理配置
    proxy: {
      '/api': {
        target: 'http://localhost:7070',
        changeOrigin: true,
        rewrite: path => path.replace(/^\/api/, '')
      }
    }
  },

 然后运行nginx.exe,并且在浏览器中输入网址localhost:80来访问我们的项目

但是这时当我们访问动态导入的路由时会出现这样的错误

我们可以在开发者工具的网络中看到同步请求,它请求的是一个vue文件而不是单页面下的js文件,因此我们选择使用官方推荐的import.meta.glob引入动态文件来解决这个问题。

三、使用import.meta.glob动态引入文件解决问题

现在我们修改原来动态引入文件的代码

const modules=import.meta.glob("../views/**/**.vue")

routes.push({
                path: `/admin${item.path}`,
                name: item.name,
                meta: {title: item.title},
                //component: () => import(/*@vite-ignore*/"../views"+item.path+"/index.vue")
                component: modules[/*@vite-ignore*/`../views${item.path}/index.vue`]
            })

 import.meta.glob("../views/**/**.vue")里的路径根据项目的相对路径来决定,如这个路径下的项目结构为

然后输出一下modules,可以看到一层结构和二层结构的.vue文件都导进去了

然后再打包成dist文件夹,此时我们发现dist文件夹中的assets文件夹中多了许多文件

nginx.conf的root路径匹配上,其余设置不动,就可以正常动态引入并访问了,并且此时我们再看同步请求,请求的是js,css等文件

如此,vite+vue3动态引入路由的打包问题便解决了,并且可以成功通过nginx代理访问,如此也方便了后续部署到服务器。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/19308.html
标签
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!