在 windows cmd 中使用带有 if 条件的 $NODE_ENV
To use $NODE_ENV with if condition in windows cmd
"scripts": {
"start": "if [[ $NODE_ENV == 'production' ]]; then node ./bin/www; else nodemon ./bin/www; fi"
},
上面的代码在 Unix 终端中使用,我想在 windows cmd
.
中使用相同的代码
但是当我尝试这样做时,我得到 NODE_ENV
was unexpected at this time.
我想要一个可以在 windows cmd
.
中执行的正确代码
考虑以下跨平台解决方案,无论 shell 是 cmd
(windows) 还是 sh
(*nix)。它基本上利用 node.js 复制相同的条件逻辑并 shell 出适当的命令。
"scripts": {
"start": "node -e \"const cmd = process.env.NODE_ENV === 'production' ? 'node' : 'nodemon'; require('child_process').execSync(cmd + ' ./bin/www', { stdio: [0,1,2] });\""
}
解释:
start
npm 脚本执行以下操作:
利用 node.js 命令行选项 -e
计算内联 JavaScript.
使用conditional (ternary) operator,即读取的部分:
const cmd = process.env.NODE_ENV === 'production' ? 'node' : 'nodemon'
我们利用process.env
属性检查NODE_ENV
环境变量的值。
如果 NODE_ENV
环境变量的值等于 production
我们将 node
命令分配给 cmd
变量。否则我们分配 nodemon
命令。
在读到的部分:
require('child_process').execSync(cmd + ' ./bin/www', { stdio: [0,1,2] });
- 我们
require
the builtin execSync()
来自 child_process
模块的方法。
- 然后我们根据在第 2 点(上面)获得的内容执行
node ./bin/www
或 nodemon ./bin/www
命令。
stdio
部分为子进程中的 stdin、stdout、stderr 配置管道。
"scripts": {
"start": "if [[ $NODE_ENV == 'production' ]]; then node ./bin/www; else nodemon ./bin/www; fi"
},
上面的代码在 Unix 终端中使用,我想在 windows cmd
.
但是当我尝试这样做时,我得到 NODE_ENV
was unexpected at this time.
我想要一个可以在 windows cmd
.
考虑以下跨平台解决方案,无论 shell 是 cmd
(windows) 还是 sh
(*nix)。它基本上利用 node.js 复制相同的条件逻辑并 shell 出适当的命令。
"scripts": {
"start": "node -e \"const cmd = process.env.NODE_ENV === 'production' ? 'node' : 'nodemon'; require('child_process').execSync(cmd + ' ./bin/www', { stdio: [0,1,2] });\""
}
解释:
start
npm 脚本执行以下操作:
利用 node.js 命令行选项
-e
计算内联 JavaScript.使用conditional (ternary) operator,即读取的部分:
const cmd = process.env.NODE_ENV === 'production' ? 'node' : 'nodemon'
我们利用
process.env
属性检查NODE_ENV
环境变量的值。如果
NODE_ENV
环境变量的值等于production
我们将node
命令分配给cmd
变量。否则我们分配nodemon
命令。
在读到的部分:
require('child_process').execSync(cmd + ' ./bin/www', { stdio: [0,1,2] });
- 我们
require
the builtinexecSync()
来自child_process
模块的方法。 - 然后我们根据在第 2 点(上面)获得的内容执行
node ./bin/www
或nodemon ./bin/www
命令。 stdio
部分为子进程中的 stdin、stdout、stderr 配置管道。
- 我们