Windows下dotenv加载含NODE_ENV变量路径的.env文件失败求助
解决Windows CMD下dotenv无法加载指定环境.env文件的问题
问题根源
Windows CMD里用set NODE_ENV=development & node index.js时,NODE_ENV的值会自带一个空格——CMD的set命令对空格敏感,=两边的空格会被保留到变量值里。你的代码拼接的路径是.env.development,但实际环境变量是development (末尾带空格),自然找不到对应文件,导致加载失败。而PowerShell的变量赋值不会带多余空格,所以能正常工作。
快速解决方法
1. 修正CMD的环境变量写法
去掉set命令中等号两边的空格,用引号包裹变量值彻底避免空格问题:
set "NODE_ENV=development" && node index.js
这样设置的NODE_ENV值就是纯development,代码里拼接的路径能精准匹配.env.development文件。
2. 代码层面兼容处理
给环境变量加个trim(),不管终端有没有带空格都能自动清理:
const dotenv = require('dotenv'); const environment = (process.env.NODE_ENV || 'development').trim(); console.log(environment); const dotenvPath = `.env.${environment}`; console.log(dotenvPath); dotenv.config({ path: dotenvPath }); console.log(process.env.PORT); console.log(process.env.NODE_ENV);
修改后再用原来的CMD命令运行,也能正确加载.env.development。
3. 跨终端统一方案(推荐)
用cross-env包消除Windows和类Unix终端的环境变量设置差异:
- 先安装依赖:
npm install cross-env --save-dev
- 在
package.json的scripts里配置启动命令:
{ "scripts": { "dev": "cross-env NODE_ENV=development node index.js" } }
之后直接运行npm run dev,不管用CMD、PowerShell还是Git Bash,都能正确加载对应环境的配置文件。
验证效果
用修正后的CMD命令执行:
set "NODE_ENV=development" && node index.js
此时控制台会输出5002,说明.env.development已成功加载。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

