使用vue cli 3项目打包到指定目录

日常打包执行npm run build会将代码打包至dist目录下,各种js引入,均已网站根目录为依据。我们想要把项目作为子目录访问时就需要做些配置了。

1 设置打包路径

vue.config.js文件中配置publicPath属性,这样在打包后distindex.html中所有的文件引入都会加上配置的前缀。打包完成后我们将dist重命名成targetPath(设置的地址),然后将文件夹上传到网站根目录即可。

1
2
3
module.exports = {
publicPath: process.env.NODE_ENV === 'production' ? '/targetPath/' : '/'
}

2 设置路由基础路径

在路由配置文件中设置base选项,如果不设置,到时候会出现找不到模块的情况。process.env.BASE_URL是一个vue cli中内置的变量,他的值就是vue.config.js中配置的publicPath的值。如果不想用这个变量,也可以自己定义。

1
2
3
4
5
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
...
})

3 配置服务器

如果项目的路由模式采用了history模式,则需要配置一下web服务器。
这里以nginx为例,上面设置的目录是targetPath我们应该做如下配置。注意一定要加上targetPath,否则会出现404错误

1
2
3
4
5
6
7
8
server{
...
location /targetPath {
try_files $uri $uri/ /targetPath/index.html;
}
...
}

参考资料

publicPath参数说明:https://cli.vuejs.org/zh/config/#publicpath
vue cli环境变量说明:https://cli.vuejs.org/zh/guide/mode-and-env.html#在客户端侧代码中使用环境变量
vue router路由base参数说明:https://router.vuejs.org/zh/api/#base
服务器配置说明:https://router.vuejs.org/zh/guide/essentials/history-mode.html#后端配置例子