You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过package.json的不同脚本命令切换dotenv的环境变量路径

dotenv多环境变量文件自动切换实现方案

方案一:启动脚本注入环境标识(通用全场景)

步骤1:修改package.json启动脚本

在不同脚本中注入NODE_ENV变量标识当前运行环境,类Unix(Mac/Linux)系统可直接使用以下配置:

"scripts": {
  "start": "NODE_ENV=production nodemon express/***",
  "serve": "NODE_ENV=production node express/***",
  "dev": "NODE_ENV=development node express/***",
  "test": "NODE_ENV=test jest --watch"
},

如果需要兼容Windows系统,先安装跨平台环境变量工具:
npm install cross-env -D
再修改脚本,在变量前添加cross-env前缀:

"scripts": {
  "start": "cross-env NODE_ENV=production nodemon express/***",
  "serve": "cross-env NODE_ENV=production node express/***",
  "dev": "cross-env NODE_ENV=development node express/***",
  "test": "cross-env NODE_ENV=test jest --watch"
},

步骤2:修改dotenv加载配置

根据注入的NODE_ENV值动态匹配env文件路径:

const runtimeEnv = process.env.NODE_ENV || 'development'
require("dotenv").config({
  // 测试环境加载test.env,其他环境默认加载.env
  path: runtimeEnv === 'test' ? 'express/config/test.env' : 'express/config/.env',
});

如果需要更灵活的多环境配置,可统一文件命名规则为.env.环境名,直接拼接路径即可:

const runtimeEnv = process.env.NODE_ENV || 'development'
require("dotenv").config({
  path: `express/config/.env.${runtimeEnv}`,
});

对应目录下需要提前创建好.env.development、.env.production、.env.test三个文件。

方案二:Jest测试场景单独配置

如果只需要测试场景单独加载env文件,无需修改业务代码,直接在Jest配置中指定加载文件即可:
在项目根目录的jest.config.js中添加如下配置:

module.exports = {
  // 其他原有jest配置保留
  setupFiles: ['<rootDir>/express/config/test.env']
}

注意事项

  • dotenv的配置代码需要放在项目入口文件的最顶部,确保所有业务模块加载前已经完成环境变量注入
  • 若同时加载多个env文件,先加载的变量优先级更高,不会被后加载的同名字段覆盖

内容的提问来源于stack exchange,提问作者user16911633

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:36:03