环境依赖

  1. 要有node,webpack,全局安装最新的vue-cli cnpm install -g @vue/cli

创建项目

  1. 切换到需要创建项目的文件夹,执行命令 vue create xxx,选择相关配置项,直到项目初始完成

如果对通过命令创建不熟悉,可以通过命令 vue ui 打开视图面板,进行可视化的项目创建

  1. 切换到项目目录 xxx 下,执行命令 npm run serve 即可启动项目
  2. vue add xxx 可以安装插件(只有使用过vue封装且存在的才会安装成功),但可能会改变你已有的代码,虽然智能,慎用

项目配置

  1. vue-cli 3.x 版本和 2.x 相差很大,所有的配置都通过一个配置文件进行,在根目录添加 vue.config.js 文件,进行项目配置:

具体配置可参考:https://github.com/vuejs/vue-cli/blob/ce3e2d475d63895cbb40f62425bb6b3237469bcd/docs/zh/config/README.md

你可以在项目目录下运行 vue inspect 来查看你修改后的 webpack 完整配置,当然你也可以缩小审查范围,比如:

  1. 各种环境配置

一般一个项目都会有以下 3 种环境:

a. 开发环境(开发阶段,本地开发版本,一般会使用一些调试工具或额外的辅助功能)

b. 测试环境(测试阶段,上线前版本,除了一些 bug 的修复,基本不会和上线版本有很大差别)

c. 生产环境(上线阶段,正式对外发布的版本,一般会进行优化,关掉错误报告)

这就需要我们进行正确的环境配置和管理,我们可以在根目录下创建以下形式的文件进行不同环境下变量的配置:

.env # 在所有的环境中被载入

.env.local # 在所有的环境中被载入,但会被 git 忽略

.env.[mode] # 只在指定的模式中被载入

.env.[mode].local # 只在指定的模式中被载入,但会被 git 忽略

.env.[mode].local 会覆盖 .env.[mode] 下的相同配置。同理 .env.local 会覆盖 .env 下的相同配置。 由此可以得出结论,相同配置项的权重: .env.[mode].local > .env.[mode] > .env.local > .env

比如我们创建一个名为 .env.stage 的文件,该文件表明其只在 stage 环境下被加载,在这个文件中,我们可以配置如下键值对的变量:

这时候我们怎么在 vue.config.js 中访问这些变量呢?很简单,使用 process.env.[name] 进行访问就可以了,比如:

当你运行 yarn serve 命令后会发现输出的是 development,因为 vue-cli-service serve 命令默认设置的环境是 development,你需要修改 package.json 中的 serve 脚本的命令为:

–mode stage 其实就是修改了 webpack 4 中的 mode 配置项为 stage,同时其会读取对应 .env.[model] 文件下的配置,如果没找到对应配置文件,其会使用默认环境 development,同样 vue-cli-service build 会使用默认环境 production。

 

  1. 环境注入 在环境配置文件中定义的变量,在 vue.config.js 中,可以通过 process.env 获得,但是到了真正的业务代码js中,只能获取环境配置文件中以 VUE_APP_ 开头的变量(NODE_ENV 和 BASE_URL 这两个特殊变量除外) 例: .env.stage.local 文件中写入:

vue.config.js 中打印 process.env,终端输出:

但是我们在入口文件 main.js 中打印会发现输出:

可见注入时过滤调了非 VUE_APP_ 开头的变量,其中多出的 BASE_URL 为你在 vue.config.js 设置的值,默认为 /,其在环境配置文件中设置无效。 本项目可通过 npm run serve-stage 查看效果。

 

  1. 额外配置 .env 这样的配置文件中的参数目前只支持静态值,无法使用动态参数,在某些情况下无法实现特定需求, 这时候我们可以在根目录下新建 config 文件夹用于存放一些额外的配置文件。

现在我们要在 vue.config.js 里注入这些变量,我们可以使用 chainWebpack 修改 DefinePlugin 中的值:

最后我们可以在客户端业务代码js中访问包含动态配置的对象:

  1. 路由优化 使用 require.ensure() 实现按需加载,只有访问到了该页面才会加载对应路由的内容 require.ensure 参考链接https://webpack.js.org/api/module-methods/#require-ensure

  1. 更好的store层级划分

moduleA.js

index.js

  1. 如果需要去掉eslint检查,操作如下 在 package.json 文件中,找到 eslintConfig ,如下

去掉extends里面的eslint项,如果代码不是热更新,需重新启动才生效。