dotenv
dotenv 的作用、.env 文件格式以及环境变量的基本用法。
#status / growing
#type / concept
#tech / dev
[!info] related notes
dotenv
在现代软件开发中,dotenv 是一个非常基础但又至关重要的概念。简单来说,它是一种将配置变量(如数据库密码、API 密钥)从代码中分离出来的管理方式。
通常,这些变量被存储在一个名为 .env 的纯文本文件中。
1. 为什么需要 dotenv?
在没有 dotenv 之前,开发者可能会直接把敏感信息写在代码里(即“硬编码”)。这会带来两个大问题:
- 安全风险:如果你把代码上传到 GitHub,全世界都能看到你的密钥。
- 环境差异:你在本地开发时用的数据库地址,和项目上线后用的数据库地址肯定不一样。频繁修改代码来适应环境非常低效。
dotenv 通过引入环境变量解决了这些问题。
2. .env 文件长什么样?
.env 文件通常放在项目的根目录下,格式非常简单,就是 键=值:
PORT=3000
DATABASE_URL=postgres://user:password@localhost:5432/mydb
STRIPE_API_KEY=sk_test_4eC39HqLyjWDarjtT1zdp7dc
DEBUG=true
3. 工作原理
当你运行程序时,dotenv 库(在 Node.js 中是 dotenv 包,在 Python 中是 python-dotenv)会执行以下操作:
- 读取
.env文件。 - 解析 其中的键值对。
- 注入 到操作系统的环境变量中(例如 Node.js 的
process.env或 Python 的os.environ)。
4. 最佳实践(避坑指南)
在使用 dotenv 时,请务必遵守以下原则:
- 千万不要提交
.env文件: 一定要在.gitignore文件中加入.env。它应该只留在你的本地设备和生产服务器上。 - **提供
.env.example**: 既然不提交真实的.env,你应该创建一个.env.example文件,里面只写键名不写值(例如PORT=),方便其他开发者知道需要配置哪些变量。 - 区分环境:
你可以根据需要创建
.env.development、.env.production等,虽然标准的dotenv默认读取.env,但大多数框架(如 Vite, Next.js, Django)都支持这种多环境扩展。
5. 简单代码示例 (Node.js)
// 1. 引入并配置
require('dotenv').config();
// 2. 使用变量
const port = process.env.PORT || 8080;
const dbKey = process.env.DATABASE_URL;
console.log(`服务器运行在端口: ${port}`);
总结一下: dotenv 就像是给你的代码配置了一个“外部大脑”,让代码保持纯净和安全,而把敏感和多变的配置留给环境自己处理。
你想了解如何在特定的编程语言(比如 Python 或 Java)中具体配置 dotenv 吗?