在使用Node开发项目的时候,使用环境配置文件来管理环境变量是一种常见地对项目中通用配置项的管理方式,其中通常包含敏感信息,如API密钥、数据库凭据等等。
现在我们以开发和生产两个环境为例,看看怎么同时通过 .env.development
和 .env.production
两个文件管理不同的环境。
npm install dotenv
同时为了能够在启动的时候指定环境和配置文件,需要再安装一个包 dotenv-cli
:
npm install dotenv-cli
在根路径下创建两个文件:.env.development
和 .env.production
在 .env.development
中写入测试数据:
BASE_URL=127.0.0.1
ENV=development
在 .env.production
中写入测试数据:
BASE_URL=123.123.123.123
ENV=production
环境变量的命名一般使用大写字母,单词用下划线隔开。
Node项目的启动脚本都位于 package.json
文件的 scripts
中,该文件一般在项目根目录。
以 koa 项目为例,开始的 启动脚本内容为:
"scripts": {
"start": "node bin/www",
"dev": "nodemon bin/www",
"prd": "pm2 start bin/www",
"test": "echo \"Error: no test specified\" && exit 1"
}
我们想要 npm run dev
能启动开发模式,而 npm run prd
能启动生产模式,但是 dotenv 并不能根据你的项目框架和默认执行命令进行开发模式的设置和环境配置文件的启用,所以我们还需要手动指定:
"scripts": {
"start": "node bin/www",
"dev": "dotenv -e .env.development nodemon bin/www",
"prd": "dotenv -e .env.production pm2 start bin/www",
"test": "echo \"Error: no test specified\" && exit 1"
}
可以看到,在上面的脚本命令中,将期望启用环境配置的启动模式命令前加上了 dotenv -e [环境配置文件名]
,其中开头的 dotenv 是安装了 dotenv-cli
包才能使用的,没下会报找不到 dotenv 命令;-e
需要空格,然后接配置文件的文件名,并不是开发环境一定得叫 development ,只要在这里的环境配置文件名能对应上你创建的环境配置文件名即可。
上我们完成了不同环境的配置,那我们该如何使用配置文件中的环境变量呢?
首先需要在项目的入口文件处引入 dotenv
:
// 加载配置文件
require('dotenv').config()
请保证在使用环境变量之前加载这段代码,成功之后 dotenv 会将当前应该启动的环境配置文件中的环境变量添加到 process
全局对象上的 env
上。
加载完成之后我们就能通过 process.env.[环境变量的变量名]
来使用配置文件中设置的变量了:
启动开发环境
npm run dev
代码
// 加载配置文件
require('dotenv').config()
...
console.log(process.env.BASE_URL)
输出 127.0.0.1