最近公司新项目用 Vue CLI 3 搭建(之前一直停留在 CLI 2 的 webpack template),升级过来后发现变化还挺大。配置文件从 build/ 目录一大堆文件变成了一个 vue.config.js,看着简洁了但第一次上手还是得翻文档。这里把我搭项目过程中折腾过的配置记一下。
1. 安装和创建项目
1 | # 先全局装好 CLI |
创建的时候它会让你选预设,可以选默认的(babel + eslint),也可以手动选功能。我一般手动选,把 Router、Vuex、CSS 预处理器、Linter 都勾上。
有一个要注意的:它会问你 “Use history mode for router?”,如果你项目部署在子路径下(比如 example.com/app/),选 Yes 的话后续 Nginx 配置会折腾一阵子。不清楚的先选 No 用 hash 模式比较省心。
2. vue.config.js 常用配置
CLI 3 把 webpack 配置封装了,想改的话需要在根目录建 vue.config.js。这个文件默认是不存在的,得自己创建。
我项目里大概是这样:
1 | const path = require('path') |
3. 踩过的坑
坑一:环境变量怎么搞
以前 CLI 2 是自己在 config/ 下建 dev.env.js 和 prod.env.js,CLI 3 改成了 .env 文件的方式。
在项目根目录下建这些文件:
1 | .env # 所有环境都会加载 |
写法:
1 | # .env.development |
1 | # .env.production |
注意:变量名必须以 VUE_APP_ 开头,不然代码里 process.env.xxx 取不到。这个坑我踩了两回才记住。
代码里这样用:
1 | const api = process.env.VUE_APP_BASE_API |
坑二:打包后页面白屏
打完包丢到服务器上,页面一片白,控制台报一堆资源 404。十有八九是 publicPath 没配对。
如果你的项目部署在域名根目录就写 '/',部署在子路径就写那个路径,比如 '/admin/'。我有次部署在二级目录结果忘了改,排查了半天才反应过来是这个问题。
坑三:CSS 预处理器全局变量
项目里用 Sass 的话,经常需要在每个组件里用到一些全局的变量和 mixin,但不想每个 .vue 文件里都手动 @import 一遍。
1 | // vue.config.js |
这个配置项名字改了好几次,每次升级 sass-loader 都得去查一下,有点烦。
坑四:externals 排除大包
打包体积太大的时候,把 Vue、ElementUI 这种大库用 CDN 引入,不打进 bundle 里:
1 | // vue.config.js |
然后在 public/index.html 里引 CDN:
1 | <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js"></script> |
这一招下来打包体积能减不少。
4. 目录结构
我一般会按这个结构组织代码,写了几个项目下来觉得还算顺手:
1 | src/ |
其实没什么标准答案,项目规模不大的时候怎么舒服怎么来,等大了再慢慢拆。
CLI 3 总体来说比 2 好用不少,至少不用面对 build/ 下面那一堆 webpack 配置文件了。虽然灵活性上有些限制,但提供的 configureWebpack 和 chainWebpack 也够日常折腾了。
评论加载中…