• 微信:WANCOME
  • 扫码加微信,提供专业咨询
  • 服务热线
  • 13215191218
    13027920428

  • 微信扫码访问本页
desc-2
环企首页

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 读取为空 确认系统环境变量是否已设置(命令行优先)