vuecli 项目支持 模式和环境变量, 那么 process.env.NODE_ENV 的值是由什么决定的?
由对应的 .env.[x] 文件来决定
当运行 vue-cli-service 命令时,所有的环境变量都从对应的环境文件中载入。如果文件内部不包含 NODE_ENV 变量,它的值将取决于模式; 默认则是 "development"
众所周知, vuecli 内置了三种模式:
--mode development对应文件.env.development--mode production对应文件.env.production--mode test, 对应文件.env.test
以上三个文件中的 NODE_ENV 是被锁定的, 无法通过相应的 .env.[x] 文件来覆盖
使用其他自定义的模式时, 如果不在对应的 .env.[x] 文件中指定 NODE_ENV, 则默认为 development,
与启动方式(vue-cli-service serve, vue-cli-service build)无关
二 文件优先级
.env # 在所有的环境中被载入
.env.local # 在所有的环境中被载入,但会被 git 忽略
.env.[mode] # 只在指定的模式中被载入
.env.[mode].local # 只在指定的模式中被载入,但会被 git 忽略
文件中的变量会做合并, 比如, 当 .env.re .env.re.local 文件都存在时,
// .env.re
NODE_ENV=production
// .env.re.local
// 没写 NODE_ENV
// package.json
scripts:{
"dev:re": "vue-cli-service serve --mode re",
}
本地开发, 执行 npm run dev:re 时, 发现实际的 NODE_ENV = production, 猜测原因是: 本地开发时, .env.re.local 优先级最高, 所有肯定被读取到, 加上
如果不在对应的
.env.[x]文件中指定NODE_ENV, 则默认为development
如果没有合并策略, 那么 `NODE_ENV` 应该是 `development`, 而实际不是 `development`, 所以存在合并策略
END