Vue内置的模式
Vue CLI 内置了三种模式
developement模式,使用vue-cli-service serve命令的时候,启动的开发环境就是这个模式,这个模式下运行的webpack会启动热更新,不会对资源进行 hash 也不会打出 vendor bundles,目的是为了在开发的时候能够快速重新构建。test模式,使用vue-cli-service test:unit命令的时候,启动的单元测试的环境就是这个模式,这个模式下的webpack不会处理图片以及一些对单元测试非必需的其他资源。production模式,vue-cli-service build命令的时候,运用的就是这个模式,这个模式的webpack会运行mode=production的配置
自定义运行模式
在执行 vue-cli-service 的命令的时候,可以通过 --mode 指定想要运行的模式,这将会覆盖默认的模式
例如在公司开发中,都会有一个测试环境,那么这个测试环境会有一些和开发/生产环境都不一样的东西,比如说我们后端服务的url,那么我们就可以给这个测试环境的打包指定一个模式,这样在打包的时候,会从指定模式的环境文件中加载环境变量,在 package.json 中添加一个 script 命令 "build:t": "vue-cli-service build --mode t",
注意:尽量不要和默认的模式冲突
package.json
1 | { |
执行 npm run build:t 的时候会运行 t 模式,会从 .env / .env.local / .env.t / .env.t.local 这些文件中加载环境变量,稍后来创建环境文件
Vue内置的环境变量
Vue CLI 内置了两个环境变量
| 环境变量/模式 | development | test | production |
|---|---|---|---|
| NODE_ENV | development | test | production |
BASE_URL(就是vue.config.js 中的publicPath ,默认是 /) | / | / | / |
自定义环境变量
当运行
vue-cli-service命令时,所有的环境变量都从对应的环境文件中载入,这就给我们提供了自定义环境变量的方式
什么是环境文件
在项目根目录下可以创建四种形式的环境文件
1 | .env # 在所有的环境中被载入 |
环境文件只包含环境变量的“键=值”对:
1 | VUE_APP_BASE_URL="http://dev.server.com" // 后端服务的url |
环境文件的优先级
- Vue CLI 启动时已经存在的环境变量拥有最高优先级,不会被
.env文件覆盖,但是可以被.env.[mode]文件覆盖 - 为一个特定模式准备的环境文件 (例如
.env.t) 将会比一般的环境文件 (例如.env) 拥有更高的优先级。
环境文件是通过运行
vue-cli-service命令载入的,因此环境文件发生变化,你需要重启服务。
动态计算环境变量
在 vue.config.js 文件中计算环境变量。它们仍然需要以 VUE_APP_ 前缀开头。
例如计算每次编译的版本和时间
1 | /* eslint-disable @typescript-eslint/no-var-requires */ |
环境变量的运用
只有 NODE_ENV,BASE_URL 和以 VUE_APP_ 开头的变量将通过 webpack.DefinePlugin 静态地嵌入到代码中
例如上面提到的 VUE_APP_BASE_URL 就是已 VUE_APP 开头的
建议不要在任何文件修改
BASE_URL的值,在执行vue-cli-service build命令的模式环境文件里都建议把NODE_ENV改成production
先来配置一下环境变量看一下环境变量的用法
在根目录新建以下文件
- .env.development 指定开发环境使用的环境变量
- .env.production 指定生产环境使用的环境变量
- .env.t 指定测试环境使用的环境变量
就简单配置一个用来区分运行环境的环境变量 VUE_APP_ENV ,这个变量可以任意取,只要求已 VUE_APP 开头,并且应该在所有的环境文件都包含这个环境变量
.env.development
1 | VUE_APP_ENV=dev |
.env.production
1 | VUE_APP_ENV=prod |
.env.t
1 | VUE_APP_ENV=t |
在项目中使用环境变量
通过 process.env.[环境变量] 的方式获取到运行模式的环境文件配置的环境变量的值
在 src/App.vue 中使用一下
1 | <template> |

运行其他模式看一下结果,命令行执行
1 | yarn serve --mode t |

运行 production 模式
1 | yarn serve --mode production |

环境变量不只是在
src下的文件可以使用,在根目录下的babel.config.js/vue.config.js等文件中也可以使用.
在 public/index.html 中使用环境变量
所有解析出来的环境变量都可以在 public/index.html 中以 **HTML 插值**中介绍的方式使用。
因为 index 文件被用作模板,所以你可以使用 lodash template 语法插入内容:
<%= VALUE %>用来做不转义插值;<%- VALUE %>用来做 HTML 转义插值;<% expression %>用来描述 JavaScript 流程控制。
例如在 index.html 使用一个 meta 标签标记我们项目的模式、版本和打包的时间
1 | <meta content="<%= VUE_APP_ENV %>"> |
执行打包命令看 dist 目录输出的html
1 | yarn build --mode development |

运行 t 模式的打包
1 | yarn build:t |

运行 production 模式的打包,build 的默认模式就是 production
1 | yarn build |

实际开发中还需要的运行环境
经过刚才的打包发现,在指定 --mode t 的时候,打包后的文件没有被压缩
这是因为没有指定 t 模式的 NODE_ENV=production ,所以使用的是 development 的 webpack 配置
所以要在环境文件中指定 NODE_ENV 的值
.env.development
1 | NODE_ENV=development |
.env.t
1 | NODE_ENV=production |
.env.production
1 | NODE_ENV=production |
再次执行 yarn build:t 或 npm run build:t,dist 目录下的文件就已经是压缩过的了

还有其他实际开发中需要配置的环境变量,比如后端接口的地址,具体看自己项目吧
完结
项目已经上传到 github 和 gitee
GitHub: https://github.com/wukang0718/cli-create-project



