process 是什么
node 中的全局变量 process 表示当前的 node 进程,process 其实就是存在于 Node.js 中的一个全局变量,包含着关于系统环境的信息
今天想对 Blog 的 Node 服务端进行区分环境,然后连接不同的数据库,但是在 process.env 中并不存在 NODE_ENV
这个东西,NODE_ENV 只是一个用户自己定义的一个变量
process.env.XXX
中的 XXX
是开发者自己定义的一个变量, 就比如 process.env.NODE_ENV
那如何配置一个变量呢?
Windows 环境变量设置
// 设置环境变量
set NODEE_ENV=production
// 删除环境变量
set NODE_ENV=
Linux 环境变量设置
// 设置环境变量
export NODE_ENV=production
// 删除环境变量
unset NODE_ENV
// 查询全部环境变量
env
常用脚本配置
在 package.json 中配置
"script": {
"start-win": "set NODE_ENV=production && node app.js",
"start-linux": "export NODE_ENV=production && node app.js"
}
踩坑
我在 Windows 上使用时发现,在Node中判断 process.env.NODE_ENV == 'production'
输出为 false
后面尝试使用 trim() 去掉首尾空格后,process.env.NODE_ENV.trim() == 'production'
时才为 true
Linux 下暂未尝试
修改脚本后则正常
"script": {
"start-win": "set NODE_ENV=production&&node app.js"
}
process.env.NODE_ENV == 'production'
--> true
跨平台方案 cross-env
什么是 cross-env?
它是一个运行跨平台设置和使用环境变量的脚本,cross-env 让开发者可以使用单个命令来设置和使用环境变量,不用再担心因为平台而产生的设置或使用差异
安装
npm install cross-env --save-dev
设置
"script": {
"start": "cross-env NODE_ENV=production && node app.js"
}
使用
console.log(process.env.NODE_ENV) // production