package.json脚本设置环境变量不生效?求解决方案
解决npm脚本设置环境变量不生效的问题
以下是几个排查和解决的关键点:
正确使用cross-env
你之前的cross-env用法可能有误,正确的写法应该把目标命令(npm run dev)和环境变量设置放在同一个cross-env指令里,这样环境变量才会传递给子进程:"dev-use-auth": "cross-env auth=true npm run dev"不要用
&&分隔,否则npm run dev会在新的shell环境中执行,无法继承之前设置的变量。检查dotenv的影响
如果你的项目使用了dotenv加载.env文件,要确认:- 代码中
dotenv.config()的调用顺序,确保它不会覆盖shell设置的环境变量(默认情况下,shell环境变量优先级高于.env文件)。 - 没有设置
override: true选项,否则.env里的auth=false会强制覆盖你设置的auth=true。
- 代码中
注意环境变量的类型
Node.js中所有环境变量都是字符串类型,所以判断时要比较字符串而非布尔值:// 错误写法 if (process.env.auth === true) { ... } // 正确写法 if (process.env.auth === "true") { ... }直接验证环境变量是否传递
可以先修改脚本,直接打印环境变量来验证:"dev-use-auth": "cross-env auth=true node -e \"console.log(process.env.auth)\""运行这个脚本,如果输出
true,说明变量设置没问题,问题出在npm run dev的执行上下文或代码判断逻辑里。操作系统兼容性(不用cross-env的情况)
如果你不想用cross-env,需要针对不同系统写脚本:- Linux/macOS:
"dev-use-auth": "auth=true npm run dev" - Windows:
"dev-use-auth": "set auth=true && npm run dev"
- Linux/macOS:
内容的提问来源于stack exchange,提问作者Mhd
相关产品推荐
相关产品推荐

