Tokenlab Openai Compatible Migration
将 OpenAI 兼容应用迁移至 TokenLab,保持请求语义并支持模型实时发现。
用于在 Node.js 项目中加载 .env 文件的环境变量管理工具。
openclaw skills install @openlark/dotenv命令、参数、文件名以原文为准
dotenv 是一个零依赖模块,可将 .env 文件中的环境变量加载到 process.env 中。
适用于需要加载 .env 文件、配置环境变量、处理 API 密钥和敏感配置、设置多环境变量,或使用 dotenv/dotenvx 的情况。
触发关键词包括:“dotenv”、“环境变量”、“env 文件”、“dotenvx”、“process.env”、“加密的 env”等。
npm install dotenv
# 或
bun add dotenv
yarn add dotenv
pnpm add dotenv.env 文件# .env
HELLO="World"
OPENAI_API_KEY="sk-your-key-here"
DATABASE_URL="postgres://localhost/mydb"
PORT=3000
DEBUG=true// CommonJS — 在入口文件最上方尽早调用
require('dotenv').config()
console.log(process.env.HELLO) // "World"
console.log(process.env.OPENAI_API_KEY)// ES 模块
import 'dotenv/config'
// 或需要自定义配置时:
import dotenv from 'dotenv'
dotenv.config({ path: '/custom/path/to/.env' })$ node index.js
◇ 注入环境变量 (4) 来自 .env.gitignore 安全性切勿将 .env 提交到版本控制系统:
# .gitignore
.env
.env.local
.env.*.local提交一个 .env.example 模板文件(不含真实密钥),供团队成员参考。
config() 配置选项dotenv.config({
path: '/custom/path/to/.env', // 默认:path.resolve(process.cwd(), '.env')
encoding: 'utf8', // 文件编码,默认 utf8
debug: true, // 启用调试日志
override: false, // 是否覆盖已存在的 process.env 值
processEnv: {}, // 自定义目标对象(默认为 process.env)
quiet: false, // v17.2+ 静默模式
})返回值:
const result = dotenv.config()
// result.parsed → { HELLO: 'World', PORT: '3000' }
// result.error → 错误对象或 undefined可通过环境变量覆盖配置选项(命令行参数优先级更高):
DOTENV_CONFIG_PATH=/custom/path/.env \
DOTENV_CONFIG_DEBUG=true \
DOTENV_CONFIG_QUIET=true \
node index.js或在 .env 文件内部设置:
DOTENV_CONFIG_QUIET=true
HELLO="World"parse() — 手动解析const dotenv = require('dotenv')
const buf = Buffer.from('HELLO=world\nPORT=3000')
const config = dotenv.parse(buf)
// { HELLO: 'world', PORT: '3000' }无需在代码中引入 dotenv,可通过命令行预加载:
node -r dotenv/config your_script.js
node -r dotenv/config your_script.js dotenv_config_path=/custom/path/.env.env 文件格式说明KEY=value
KEY2="带空格的值"
KEY3='单引号值'# 这是注释
SECRET_KEY=abc123 # 行尾注释
HASH="包含#的值" # 包含 # 的值必须用引号包裹PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
Line1
Line2
-----END RSA PRIVATE KEY-----"
# 或使用 \n
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nLine1\nLine2\n-----END RSA PRIVATE KEY-----"import dotenv from 'dotenv'
dotenv.config()
// 或
import 'dotenv/config'
// 声明类型增强
declare global {
namespace NodeJS {
interface ProcessEnv {
OPENAI_API_KEY: string
DATABASE_URL: string
}
}
}dotenvx 是 dotenv 的升级版 CLI 工具,提供加密、变量扩展和多环境管理等高级功能。
npm install -g @dotenvx/dotenvx
# 或
brew install dotenvx
# 或
curl -fsS https://dotenvx.sh/ | sh# .env
USERNAME="admin"
DATABASE_URL="postgres://${USERNAME}@localhost/mydb"dotenvx run -- node index.jsDATABASE_URL="postgres://$(whoami)@localhost/mydb"# 创建生产环境文件
echo "HELLO=production" > .env.production
# 加载特定环境
dotenvx run -f=.env.production -- node index.js
# 加载多个文件(左侧优先级更高)
dotenvx run -f=.env.local -f=.env -- node index.js# 加密 .env 文件
dotenvx encrypt -f .env.production
# 生成 .env.keys(包含解密密钥)→ 添加到 .gitignore
# 此时加密后的 .env.production 可安全提交
# 部署时设置解密密钥
heroku config:set DOTENV_PRIVATE_KEY_PRODUCTION="<来自 .env.keys 的密钥>"
# 运行时自动解密
dotenvx run -- node index.js| 需求 | 工具 |
|---|---|
将 .env 加载到 process.env | dotenv |
| 加密环境变量 + 安全提交 Git | dotenvx encrypt |
变量扩展 ${VAR} | dotenvx run |
命令替换 $(cmd) | dotenvx run |
| 多环境切换 | dotenvx run -f=.env.ENV |
| 生产环境部署解密 | dotenvx + DOTENV_PRIVATE_KEY |
// app.js — 第一行
require('dotenv').config()
const express = require('express')
const app = express()
// 后续所有模块均可通过 process.env 读取值const dotenv = require('dotenv')
dotenv.config()
const required = ['DATABASE_URL', 'SECRET_KEY']
for (const key of required) {
if (!process.env[key]) {
throw new Error(`缺少必需的环境变量: ${key}`)
}
}apps/backend/
├── .env ← 放在应用的运行目录中
├── app.js
└── package.json.env — 本地开发环境(默认).env.production — 生产环境.env.test — 测试环境.env.example — 模板文件(提交到 Git,不包含实际值)不要让 .env.production 继承 .env 中的值 —— 每个环境文件应独立完整。
# 抑制注入日志
DOTENV_CONFIG_QUIET=true node index.js| 问题 | 解决方案 |
|---|---|
环境变量为 undefined | 确保在程序最开始就调用 dotenv.config();检查 .env 文件是否位于正确目录 |
修改 .env 后未生效 | 重启进程(require 缓存不会自动重新加载) |
| 多行值解析错误 | 确保使用 dotenv >= v15.0.0 |
| Docker 中环境变量未加载 | 确保 .env 文件已通过 COPY 命令复制进容器,且路径正确 |
值中的 # 被截断 | 包含 # 的值需用引号包裹 |
已收录 24 个 Skill