node 项目读取环境变量
发布于 2023-10-18
约 1 分钟
node 项目从 process.env
读取环境变量时,process.env
有哪些来源?
命令行
使用 cross-env
处理跨平台环境变量设置。
{
"scripts": {
"dev": "cross-env MY_ENV=hello node ./index.js",
"start": "cross-env MY_ENV=hello webpack"
}
}
在 mac 下可以直接设置局部变量,
{ "dev": "MY_ENV=hello node ./index.js" }
。
.env
文件
环境变量配置在项目根目录下的 .env
。
PORT=8080
MY_ENV=live
安装 dotenv
,npm install dotenv --save
。
dotenv
会自动读取项目根目录下的 .env
到 process.env
,并且不会覆盖已存在 process.env
上的环境变量。
require('dotenv').config();
const http = require('http');
const port = parseInt(process.env.PORT, 10) || 5000;
http
.createServer((request, response) => {
response.writeHead(200, {
'Content-Type': 'text/plain',
});
response.write(process.env.MY_ENV);
response.end();
})
.listen(port);
按照 dotenv
的最佳实践:
- 应该把
.env
加到.gitignore
,因为每个环境的配置不同,还可能包含数据库密钥等; - 不要按部署环境划分
.env.test
、.env.staging
等环境变量文件,因为难以扩展,更多部署环境就需要添加更多的配置文件。
shell
如果在执行 node 脚本前,还需为其他的 shell 脚本设置环境变量。
set -o allexport # 👉 把后面创建的变量标记为导出,即导出为环境变量
. ./.env
set +o allexport # 关闭 👆 这种模式
关联
本博客 所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!