如何设置NODE_ENV使dotenv加载.env.development.local而非.env
解决dotenv仅加载.env文件的问题
1. 在启动脚本中指定NODE_ENV
原生dotenv不会自动识别运行环境,必须先通过启动脚本明确设置NODE_ENV,才能加载对应后缀的环境变量文件。根据你的操作系统,修改package.json里的start脚本:
macOS/Linux 或 Windows Git Bash:
"scripts": { "build": "webpack", "start": "NODE_ENV=development nodemon src/index.js" }
Windows 命令提示符(CMD):
"scripts": { "build": "webpack", "start": "set NODE_ENV=development && nodemon src/index.js" }
跨平台兼容(推荐):
如果需要同时支持所有系统,先安装cross-env依赖:
npm install cross-env --save-dev
再修改脚本:
"scripts": { "build": "webpack", "start": "cross-env NODE_ENV=development nodemon src/index.js" }
2. 按优先级手动加载环境变量文件
原生dotenv不会自动按优先级加载后缀文件,需要在项目入口文件src/index.js开头,手动按你提到的顺序加载对应文件:
const dotenv = require('dotenv'); const path = require('path'); // 按优先级加载:.env.development.local > .env.local > .env.development > .env const envFiles = [ `.env.${process.env.NODE_ENV}.local`, '.env.local', `.env.${process.env.NODE_ENV}`, '.env' ]; envFiles.forEach(file => { dotenv.config({ path: path.resolve(__dirname, '..', file) }); }); // 后续业务代码 const express = require('express'); const app = express(); // ...
执行npm start后,系统会先设置NODE_ENV=development,再按优先级依次加载环境变量文件,后续加载的文件会覆盖前面的同名变量,符合你预期的加载顺序。
内容的提问来源于stack exchange,提问作者Jason Ayer
相关产品推荐
相关产品推荐

