大家好,我是 Immerse,一名独立开发者、内容创作者、AGI实践者。
https://yaolifeng.com
也同步更新。我会在这里分享关于编程
、独立开发
、AI
、出海
、个人思考
等内容。
如果本文对你有帮助,欢迎动动小手指一键三连(点赞
、评论
、转发
),给我一些支持和鼓励,谢谢!
分享一个能够让环境配置管理变得优雅而简单工具——dotenv
看看下面这些"死亡操作",你中了几条:
// 把密码直接写死在代码里
const dbConfig = {
password: '12345678', // 提交到GitHub的那一刻,你就完了
apiKey: 'sk-1234567890abcdef', // 5分钟内被爬虫扫走
};
// 不同环境手动改配置
// 开发环境
const API_URL = 'http://localhost:3000';
// 测试环境
const API_URL = 'http://test.example.com';
// 生产环境
const API_URL = 'http://api.example.com';
// 每次项目部署都忙着改配置,一不小心就可能出错
第 1 步:安装
npm install dotenv --save
第 2 步:创建配置文件
在项目根目录创建 .env
文件:
# 数据库配置
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_very_secret_password
DB_NAME=myapp_production
# API密钥
WECHAT_APP_ID=wx1234567890abcdef
WECHAT_SECRET=your_wechat_secret_here
JWT_SECRET=your_jwt_super_secret_key
# 服务器配置
PORT=3000
NODE_ENV=production
第 3 步:一行代码搞定所有配置
// 放在项目入口文件最前面
require('dotenv').config();
// 然后在任何地方这样用:
const dbConfig = {
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
};
const port = process.env.PORT || 3000;
就这么简单!
还在为开发、测试、生产环境切换头疼?dotenv 让你优雅解决:
项目结构:
my-awesome-project/
├── .env.development # 开发环境
├── .env.test # 测试环境
├── .env.production # 生产环境
├── .gitignore # 保护你的秘密
└── package.json
.gitignore(这个必须加!):
# 保护所有环境变量文件
.env
.env.local
.env.*.local
启动命令(一键切换):
# 开发环境
node -r dotenv/config app.js dotenv_config_path=.env.development
# 测试环境
node -r dotenv/config app.js dotenv_config_path=.env.test
# 生产环境
node -r dotenv/config app.js dotenv_config_path=.env.production
package.json 简化操作:
{
"scripts": {
"dev": "node -r dotenv/config app.js dotenv_config_path=.env.development",
"test": "node -r dotenv/config app.js dotenv_config_path=.env.test",
"prod": "node -r dotenv/config app.js dotenv_config_path=.env.production"
}
}
真实项目结构:
project/
├── src/
│ ├── config/
│ │ └── database.js
│ ├── models/
│ └── app.js
├── .env.development
├── .env.production
└── .gitignore
config/database.js(安全典范):
require('dotenv').config();
const config = {
development: {
username: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME || 'myapp_dev',
host: process.env.DB_HOST || 'localhost',
dialect: 'mysql',
logging: true,
},
production: {
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.DB_HOST,
dialect: 'mysql',
logging: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000,
},
},
};
module.exports = config;
app.js(安全启动):
require('dotenv').config();
const express = require('express');
const db = require('./config/database');
// 验证必需的环境变量
const requiredEnvVars = ['DB_HOST', 'DB_USER', 'DB_PASSWORD', 'DB_NAME'];
requiredEnvVars.forEach(envVar => {
if (!process.env[envVar]) {
console.error(`缺少必需的环境变量: ${envVar}`);
process.exit(1);
}
});
const app = express();
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`服务器安全运行在端口 ${port}`);
});
技巧 1:智能默认值
// 环境变量不存在时的优雅降级
const config = {
port: process.env.PORT || 3000,
env: process.env.NODE_ENV || 'development',
jwtExpiresIn: process.env.JWT_EXPIRES_IN || '24h',
bcryptRounds: parseInt(process.env.BCRYPT_ROUNDS) || 10,
};
技巧 2:类型转换
// 处理不同类型的环境变量
const serverConfig = {
port: parseInt(process.env.PORT) || 3000,
isProduction: process.env.NODE_ENV === 'production',
enableLogging: process.env.ENABLE_LOGGING === 'true',
maxUploadSize: parseInt(process.env.MAX_UPLOAD_SIZE) || 5242880, // 5MB
};
技巧 3:配置验证和错误处理
// 创建配置验证工具
const validateConfig = () => {
const required = ['DB_HOST', 'DB_USER', 'DB_PASSWORD', 'JWT_SECRET'];
const missing = required.filter(key => !process.env[key]);
if (missing.length > 0) {
throw new Error(`缺少必需的环境变量: ${missing.join(', ')}`);
}
console.log('所有环境变量验证通过');
};
// 使用
try {
validateConfig();
} catch (error) {
console.error(error.message);
process.exit(1);
}
以上就是使用 dotenv 管理环境变量的完整指南。
通过这种方式,你可以轻松地在不同环境间切换,保护敏感信息,并保持代码的整洁和安全。