环企首页
dotenv
概述
dotenv 将 .env 文件中的环境变量加载到 process.env 中,实现配置与代码分离。多个环境(开发、测试、生产)可使用不同的 .env 文件。
安装:
npm install dotenv
核心函数
dotenv.config(options)
加载 .env 文件。
// 方式1:入口文件顶部加载
require('dotenv').config()
// 或
import 'dotenv/config'
// 方式2:指定文件路径
require('dotenv').config({ path: '.env.local' })
.env 文件
# .env — 所有环境共享的默认值
NODE_ENV=development
PORT=3000
DATABASE_URL=postgres://localhost:5432/mydb
# 注释
SECRET=mysecret
API_KEY=sk-xxxx
# 空值
OPTIONAL_VAR=
# .env.local — 本地覆盖(不上版本库)
DATABASE_URL=postgres://localhost:5432/mydb_local
# .env.production — 生产环境
DATABASE_URL=postgres://prod-server:5432/mydb
SECRET=prod-secret
环境变量优先级
.env.local > .env.[environment] > .env
// 加载顺序(按优先级从高到低)
dotenv.config({ path: '.env.production' }) // 生产
dotenv.config({ path: '.env.test' }) // 测试
dotenv.config({ path: '.env.development' }) // 开发
dotenv.config() // 基础 .env(最低优先级)
访问环境变量
require('dotenv').config()
const port = process.env.PORT || 3000
const dbUrl = process.env.DATABASE_URL
const secret = process.env.SECRET
// 在 Prisma 等 ORM 中
// DATABASE_URL=process.env.DATABASE_URL
常见模式
多环境配置
// config.js
require('dotenv').config({ path: `.env.${process.env.NODE_ENV || 'development'}` })
module.exports = {
port: process.env.PORT,
dbUrl: process.env.DATABASE_URL,
jwtSecret: process.env.JWT_SECRET
}
防泄露检查
// 启动时检查关键变量
const required = ['DATABASE_URL', 'JWT_SECRET']
const missing = required.filter(k => !process.env[k])
if (missing.length > 0) {
console.error(`缺少环境变量: ${missing.join(', ')}`)
process.exit(1)
}
常见问题
| 问题 | 解决方案 |
|---|---|
| 变量没加载 | 确认 dotenv.config() 在所有代码之前调用 |
.env 不生效 |
检查文件路径,dotenv.config({ path: __dirname + '/.env' }) |
| 生产环境变量覆盖 | 生产用环境变量而非 .env 文件(平台内置方式) |
| 变量值含空格 | 用引号:SECRET="hello world" |
| 上传代码时泄露 | .env 文件加到 .gitignore,.env.example 上传 |
| NODE_ENV 读取为空 | 确认系统环境变量是否已设置(命令行优先) |