问题描述
在项目的 package.json 中的 script 设置命令
json
"dev": "set ENV=local node ./index.js",
"beta": "set ENV=beta node ./index.js",
"prod": "set ENV=production node ./index.js",
在 env.js 文件中的方法获取当前环境,和判断当前环境,在 index.js 中,将方法挂在 app 上,可以通过 app.env 获取对应的方法
javascript
// 是否本地环境
isLocal() {
return process.env.ENV === "local";
},
// 是否测试环境
isBeta() {
return process.env.ENV === "beta";
},
// 是否生产环境
isProduction() {
return process.env.ENV === "production";
},
// 获取当前环境
get() {
return process.env.ENV ?? "local";
}
当使用 npm run dev , npm run beta, npm run prod 启动项目对应的环境,用 console.log(app.env.get()) 可以输出对应的 local, beta, production。但是判断是否测试环境,是否生产环境时,永远为 false。
检查一(操作系统问题)
在设置环境变量命令时,操作系统的不同,命令也不同,上述问题描述中是在 Windows 系统中的写法,而在 Mac 或 Linux 中可不用 set , 或把 set 改为 export 。
json
"dev": "ENV=local node ./index.js",
"beta": "ENV=beta node ./index.js",
"prod": "ENV=production node ./index.js",
使用了对应操作系统的设置还是没有解决问题
检查二(引号问题)
bash
set ENV=production node ./index.js
# 或
set ENV='production' node ./index.js
两种写法对应判断结果也是有影响的,'production' 和 production 会判断为 false 。还有可能使用了双引号(""),production 后有空格的问题导致的。使用 process.env.ENV.trim() === "production" 可去除 production 后的空格。 此操作可能还是无法正确判断环境。
检查三(使用 cross-env )
安装 cross-env 插件(不推荐全局安装)
sql
npm install cross-env --save-dev
使用 cross-env 设置环境命令
json
"dev": "cross-env ENV=local node ./index.js",
"beta": "cross-env ENV=beta node ./index.js",
"prod": "cross-env ENV=production node ./index.js",
推荐直接使用 cross-env ,解决问题省时又省力。