环境变量文件
环境变量文件是一个纯文本文件,通常命名为 .env,以「键=值」的形式逐行存放配置项,例如 DATABASE_URL=postgres://user:pass@localhost/db。它的核心作用是把配置从代码里分离出来:程序运行时再把这些值加载成环境变量,同一份代码换个 .env 就能跑在不同机器上。名字里的 dotenv 来自最早实现这一约定的同名库。
需要注意,操作系统并不会自动读取 .env,必须由框架或专门的库(各语言都有 dotenv 实现)在启动时解析、并注入到进程的环境变量中。常见用途包括:
- 数据库连接串、端口等随部署环境变化的配置
- API 密钥、令牌等不宜写死在代码里的敏感信息
- 区分不同环境,如
.env.local、.env.production
使用时有几个易踩的点:值全部是字符串,没有类型,true、123 读出来都是文本;.env 不是 shell 脚本,不同解析器对引号、# 注释、${} 变量引用的支持并不一致;它是明文存储、并不加密,所谓「安全」只在于不把它提交到版本库——应写进 .gitignore,另附一份不含真实值的 .env.example 作为模板。
常见问题
.env 文件需要提交到 Git 吗?
不应该。它常含密钥、令牌等敏感信息,应加入 .gitignore。团队协作时改为提交一份不含真实值的 .env.example 作为字段模板。
为什么我建了 .env,程序却读不到里面的变量?
因为操作系统不会自动加载 .env,必须由框架或 dotenv 类库在启动时解析并注入。请确认已安装对应库、在入口处调用了加载逻辑,且文件名和路径正确。
.env 和 .properties、JSON 配置有什么区别?
.env 专门用来设置环境变量,格式是扁平的 KEY=VALUE,值只能是字符串;.properties、JSON 则是通用配置格式,能表达嵌套和层级。三者之间常需互相转换。