读取 ENV 文件、格式化和验证
最佳实践
ts
import ms from 'ms'
import { config } from 'dotenv'
import { cleanEnv, str, email, json, bool, makeValidator } from 'envalid'
// .env
config()
if (process.env.NODE_ENV) {
// .env.development / .env.production / .env.test / ...
config({ path: `.env.${process.env.NODE_ENV}` })
// 本地配置 .env.development.local / ...
config({ path: `.env.${process.env.NODE_ENV}.local` })
}
// 自定义时长验证器
const duration = makeValidator<number>((s) => ms(s as ms.StringValue))
// 使用 cleanEnv 验证环境变量
const env = cleanEnv(process.env, {
API_KEY: str(),
ADMIN_EMAIL: email({ default: 'admin@example.com' }),
EMAIL_CONFIG_JSON: json({ desc: 'Additional email parameters' }),
NODE_ENV: str({
choices: ['development', 'test', 'production', 'staging'],
}),
CORS: str(),
SOCKET_IO: bool(),
TOKEN_EXPIRY: duration(),
PRIVATE_KEY: str(),
})
console.log(env)
txt
NODE_ENV = 'development'
API_KEY = '11111111111111'
ADMIN_EMAIL = 'admin@gmail.com'
EMAIL_CONFIG_JSON = { "host": "smtp.gmail.com", "port": 587, "username": "admin@gmail.com", "password": "admin" }
CORS = '*'
SOCKET_IO = true
TOKEN_EXPIRY = '7d'
# 多行值
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
...
Kh9NV...
...
-----END RSA PRIVATE KEY-----"
输出结果如下:
shell
{
API_KEY: '11111111111111',
ADMIN_EMAIL: 'admin@gmail.com',
EMAIL_CONFIG_JSON: {
host: 'smtp.gmail.com',
port: 587,
username: 'admin@gmail.com',
password: 'admin'
},
NODE_ENV: 'development',
CORS: '*',
SOCKET_IO: true,
TOKEN_EXPIRY: 604800000,
PRIVATE_KEY: '-----BEGIN RSA PRIVATE KEY-----\n' +
'...\n' +
'Kh9NV...\n' +
'...\n' +
'-----END RSA PRIVATE KEY-----'
}
以上代码需要安装以下模块:
bash
pnpm add dotenv envalid ms
pnpm add -D @types/ms
bash
yarn add dotenv envalid ms
yarn add -D @types/ms
bash
npm i dotenv envalid ms
npm i -D @types/ms