如何使用dotenv在Node.js中加载.env和.env.local的环境变量
多环境变量文件加载实现方案
需求可实现性结论
该需求完全可以实现,实现逻辑简单清晰。
使用dotenv加载双文件的方法
dotenv支持手动指定待加载的文件路径,只需按优先级先后加载两个文件即可,同名称环境变量会以最后加载的文件中的值为准,符合「本地配置覆盖公共配置」的常规使用逻辑。
操作步骤:
- 安装dotenv依赖
npm install dotenv - 编写加载逻辑,建议增加本地文件存在性判断避免文件不存在时报错:
const dotenv = require('dotenv'); const fs = require('fs'); // 先加载公共通用环境变量 dotenv.config({ path: '.env' }); // 后加载本地私有环境变量,重复key会自动覆盖公共配置 if (fs.existsSync('.env.local')) { dotenv.config({ path: '.env.local' }); }
注意:加载顺序直接决定变量优先级,不要将顺序搞反导致本地配置被公共配置覆盖
不使用dotenv的业内通用方案
业内没有统一的第三方替代方案,大多基于所处技术栈使用内置能力实现,主流方案如下:
- 上层框架原生支持:绝大多数Node.js生态的应用框架都内置了多env文件加载能力,无需手动引入dotenv
- Next.js:默认按优先级
.env.local>.env.[环境标识]>.env自动加载,无需额外配置 - NestJS:通过内置的
@nestjs/config模块,初始化时指定多个env文件路径即可import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ ConfigModule.forRoot({ envFilePath: ['.env.local', '.env'], isGlobal: true }) ] }) export class AppModule {} - Vite生态项目:无论是前端还是搭配Node.js后端,都内置了env解析能力,按规则命名文件放在根目录即可自动按优先级加载
- Next.js:默认按优先级
- 原生Node.js手动实现:如果不想引入任何第三方依赖,可以自行实现解析逻辑,读取两个文件内容拆分key-value后写入
process.env,后写入的同key值会自动覆盖前者。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

