1. 配置文件的加载机制:
让我们看看代码中是如何处理这些配置文件的:
js
// src/config/index.js 中的代码
const loadEnv = () => {
const env = process.env.NODE_ENV || 'development'; // 获取当前环境
const envPath = path.resolve(process.cwd(), `.env.${env}`); // 根据环境选择配置文件
dotenv.config({ path: envPath }); // 加载对应的配置文件
};
通过path.resolve(process.cwd(),
.env.${env});
获取到环境变量的文件,然后读取信息。
2. 环境切换机制:
在 package.json 中定义了不同环境的启动命令:
js
{
"scripts": {
"dev": "cross-env NODE_ENV=development nodemon src/app.js", // 开发环境
"start": "cross-env NODE_ENV=production node src/app.js" // 生产环境
}
}
工作流程:
- 开发环境(执行 npm run dev):
- 设置 NODE_ENV=development
- 加载 .env.development 文件
- 使用 nodemon 启动服务(支持热重载)
- 输出详细的调试信息
- 使用本地数据库配置
- 生产环境(执行 npm start):
- 设置 NODE_ENV=production
- 加载 .env.production 文件
- 使用 node 直接启动服务
- 只输出重要的日志信息
- 使用生产环境数据库配置
3. 配置文件的使用:
在代码中通过 process.env 来使用这些配置,例如:
js
// src/config/db.js 中的数据库配置
const sequelize = new Sequelize({
dialect: 'mysql',
host: process.env.DB_HOST, // 使用配置文件中的数据库主机
port: process.env.DB_PORT, // 使用配置文件中的数据库端口
database: process.env.DB_NAME, // 使用配置文件中的数据库名
username: process.env.DB_USER, // 使用配置文件中的用户名
password: process.env.DB_PASSWORD // 使用配置文件中的密码
});
// src/app.js 中的跨域配置
app.use(cors({
origin: process.env.CORS_ORIGIN, // 使用配置文件中的跨域配置
credentials: true
}));
- 安全考虑:
- 这两个文件都在 .gitignore 中,不会被提交到代码仓库
- 生产环境的敏感信息(如密码、密钥)应该通过安全的方式管理
- 配置文件中的值可以被环境变量覆盖
使用示例:
js
# 开发环境启动
npm run dev
# 此时会加载 .env.development 的配置
# 使用 nodemon 启动,支持热重载
# 生产环境启动
npm start
# 此时会加载 .env.production 的配置
# 使用 node 直接启动,不支持热重载