Node.js项目中如何让NPM脚本加载指定环境变量文件?
问题分析与解决方法
问题根源
dotenv 默认只会自动加载根目录下的 .env 文件,它不会识别 supervisor 的 --mode production 参数,也不会根据这个参数自动切换到 .env.production 文件。supervisor 的 --mode 参数是用于自身运行模式配置的,和 dotenv 的环境文件加载逻辑完全无关。
解决方法
这里提供三种可行的解决方式:
方式一:通过环境变量指定dotenv加载路径
直接在脚本中设置 DOTENV_CONFIG_PATH 环境变量,告诉dotenv要加载的目标文件:
修改 package.json 中的脚本配置:
"scripts": { "job_orders": "DOTENV_CONFIG_PATH=.env.production supervisor --mode production jobs/job_orders.js" }
dotenv 会读取这个环境变量的值,加载对应的 .env.production 文件。
方式二:在代码中根据环境变量动态加载
先在脚本中设置 NODE_ENV 环境变量,再在代码里根据这个值判断加载哪个文件:
- 修改脚本:
"scripts": { "job_orders": "NODE_ENV=production supervisor --mode production jobs/job_orders.js" }
- 替换代码中的
import 'dotenv/config'为以下逻辑:
import dotenv from 'dotenv'; import path from 'path'; // 根据NODE_ENV确定要加载的环境文件路径 const envFilePath = process.env.NODE_ENV === 'production' ? path.resolve(process.cwd(), '.env.production') : path.resolve(process.cwd(), '.env'); dotenv.config({ path: envFilePath });
方式三:使用dotenv-cli工具(需额外安装)
先安装 dotenv-cli:
npm install dotenv-cli --save-dev
然后修改脚本,通过它指定要加载的环境文件:
"scripts": { "job_orders": "dotenv -e .env.production -- supervisor --mode production jobs/job_orders.js" }
内容的提问来源于stack exchange,提问作者markzzz
相关产品推荐
相关产品推荐

