如何在 Node.js 中使用 .env 文件管理环境变量 ?

Node.js 应用程序通常依赖于环境变量来管理敏感信息或配置设置。.env 文件已经成为一种流行的本地管理这些变量的方法,而无需在代码存储库中公开它们。本文将探讨 .env 文件为什么重要,以及如何在 Node.js 应用程序中有效的使用它。

为什么使用 .env 文件 ?

Security

在源代码中保留敏感信息 (如 API 密钥、数据库凭据) 可能会将它们暴露给意想不到的访问者。将此数据分离到特定于环境的文件中,您可以使用 .gitignore 轻松地将其排除在版本控制之外。

Configurability

随着应用程序的迭代增长,它们可能需要针对不同环境 (开发、测试、生产) 使用不同配置。使用 .env 文件有助于在配置和代码之间保持清晰的分离。

Portability

通过在代码中引用环境变量,您可以维护一个易于在不同环境之间移动的一致的代码库,只需要更新 .env 文件或给定部署的实际环境变量。

如何在 Node.js 中使用 .env 文件

1. Creating the .env file

在项目的根目录中创建一个 .env 文件,环境变量定义:key = value

env 复制代码
DATABASE_URL=mongodb://localhost:27017/mydb
SECRET_KEY=my-secret-key
API_KEY=abcdef123456

2. Ignoring the .env file

为了防止你的 .env 文件提交到存储库,将其添加到 .gitignore 文件中。

gitignore 复制代码
# .gitignore
node_modules/
.env

3. Reading the .env file in your application

Node.js 应用程序访问 .env 文件中定义的变量,通常会使用 dotenv 软件包。

复制代码
npm install dotenv

在主应用程序文件的顶部(通常是 index.js 或 server.js),导入并配置 dotenv

javascript 复制代码
require('dotenv').config();

console.log(process.env.DATABASE_URL); // Outputs: mongodb://localhost:27017/mydb

通过调用 dotenv.config().env 文件中的所有变量加载到 process.env,它们在整个应用程序中都可以访问。

4. Using environment variables in the application

既然已经加载了环境变量,就可以在整个应用程序中使用它们了。例如,当连接到 MongoDB 实例时

javascript 复制代码
const mongoose = require('mongoose');

mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true, useUnifiedTopology: true });

或者在配置 API 时

javascript 复制代码
const apiKey = process.env.API_KEY;

最佳实践

Never commit your .env file:

一定要确保 .env 文件被添加到你的 .gitignore 文件中。

Use descriptive variable names

清晰的名称使团队成员更容易理解每个变量的用途。

Provide a .env.example

与其共享 .env 文件,不如创建一个 .env.example 文件,包含所有键但不包含值,这可以作为团队成员或部署的模板。

Use fallbacks

有时,您可能希望在缺少环境变量的情况下提供一个默认值。

javascript 复制代码
const apiKey = process.env.API_KEY || 'default-api-key';

Don't over-rely on .env

对于较大的应用程序或微服务架构,请考虑使用专用的配置管理系统或服务。

我的开源项目

相关推荐
许久'1 小时前
环境搭建node.js gnvm
node.js
细节控菜鸡2 小时前
Webpack 核心知识点详解:proxy、热更新、Loader与Plugin全解析
前端·webpack·node.js
spmcor2 小时前
Nest.js 文件分片上传:当大文件来敲门,别慌,我们有“分尸”妙计!
node.js
星空下的曙光13 小时前
Node.js crypto模块所有 API 详解 + 常用 API + 使用场景
算法·node.js·哈希算法
青灬河18 小时前
实现企业级全栈应用服务框架-Elpis(一)
vue.js·node.js
星空下的曙光21 小时前
Node.js events模块所有 API 详解 + 常用 API + 使用场景
node.js
无责任此方_修行中21 小时前
我的两次 Vibe Coding 经历,一次天堂,一次地狱
后端·node.js·vibecoding
程序铺子1 天前
如何使用 npm 安装 sqlite3 和 canvas 这些包
javascript·npm·node.js
星空下的曙光1 天前
Node.js 事件循环(Event Loop)
node.js
勤奋菲菲2 天前
Egg.js 完全指南:企业级 Node.js 应用框架
开发语言·javascript·node.js