vue-cli模式和环境变量

478 阅读3分钟

在项目中,经常需要切换各种环境,比如开发环境,测试环境,预生产环境,生产环境等,如果每次打包都要根据部署的环境去修改路径十分麻烦,这时候vue-cli的模式和环境变量则能够很好地解决这个麻烦。

模式

先说模式,默认情况下,一个 Vue CLI 项目有三个模式

  1. development 模式用于 vue-cli-service serve
  2. test 模式用于 vue-cli-service test:unit
  3. production 模式用于 vue-cli-service buildvue-cli-service test:e2e

修改模式:可以通过传递 --mode 选项参数为命令行覆写默认的模式,例如:

package.json文件

vue-cli-service build --mode development

"build:dev":"vue-cli-service build --mode development",
"build:sit":"vue-cli-service build --mode sit",
"build:uat":"vue-cli-service build --mode uat",
"build:prod":"vue-cli-service build --mode production"
  • 当运行 vue-cli-service 命令时,所有的环境变量都从对应的环境文件(--mode 后面接的就是文件)中载入。

  • 如果文件内部不包含 NODE_ENV 变量,它的值将取决于模式

  • 例如,在 production 模式下被设置为 "production",在 test 模式下被设置为 "test",默认则是 "development"

NODE_ENV 是什么呢?

它是决定你的应用运行的模式,是开发,生产还是测试,因此也决定了创建哪种 webpack 配置, 比如

NODE_ENV=“development”
//创建一个 webpack 配置,该配置启用热更新,
//不会对资源进行 hash 也不会打出 vendor bundles,
//目的是为了在开发的时候能够快速重新构建。
NODE_ENV=“production”
//无论你要部署到哪个环境,应该始终把 `NODE_ENV` 设置为 `"production"` 
//来获取可用于部署的应用程序。
NODE_ENV=“test”
//Vue CLI 会创建一个优化过后的,
//并且旨在用于单元测试的 webpack 配置,
//它并不会处理图片以及一些对单元测试非必需的其他资源

环境变量

只有 NODE_ENVBASE_URL 和以 VUE_APP_ 开头的变量将通过 webpack.DefinePlugin 静态地嵌入到客户端侧的代码中。这是为了避免意外公开机器上可能具有相同名称的私钥。我们可以在代码中以下面的方式访问:process.env.VUE_APP_TITLE

除了VUE_APP_*变量外,还有两个始终可用的特殊变量:

  • NODE_ENV 值为development、productin、test中的一个。
  • BASE_URL 与vue.config.js中的publicPath相符,即应用部署的基础路径

你可以在你的项目根目录(src同级)中放置下列文件来指定环境变量:

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

例如:

.evn.development文件,只在开发的模式中被载入

NODE_ENV=“development”
VUE_APP_TITLE="my App development"
VUE_APP_BASE_URL="https://logscan-sit.xxx.com/"
outputDir="dev"
.evn.production文件,只在生产模式中被载入

NODE_ENV=“production”
VUE_APP_TITLE="my App production"
VUE_APP_BASE_URL="https://logscan.xxx.com/"
outputDir="dist"

注意:一个环境文件只包含环境变量的“键=值”对

比如test模式下,流程就是

一:在根目录创建一个名env.test的文件,

二:在package.json文件中添加”build-test”: “vue-cli-service build –mode test”

三:执行npm run build-test

就是去按照你在env.test里面的配置去buid出测试环境