在 Windows cmd 中使用 $NODE_ENV 和 if 条件
Posted
技术标签:
【中文标题】在 Windows cmd 中使用 $NODE_ENV 和 if 条件【英文标题】:To use $NODE_ENV with if condition in windows cmd 【发布时间】:2020-11-06 10:17:37 【问题描述】:"scripts":
"start": "if [[ $NODE_ENV == 'production' ]]; then node ./bin/www; else nodemon ./bin/www; fi"
,
上面的代码用于Unix终端,我想在windowscmd
中使用。
但是当我尝试这样做时,我得到了NODE_ENV
,这在当时是出乎意料的。
我想要一个可以在 windows cmd
中执行的正确代码。
【问题讨论】:
【参考方案1】:考虑以下跨平台解决方案,无论外壳是cmd
(windows) 还是sh
(*nix),它都能成功运行。它本质上是利用 node.js 来复制相同的条件逻辑并输出适当的命令。
"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
是来自child_process
模块的内置execSync()
方法。
然后我们根据在第 2 点(上图)获得的内容执行node ./bin/www
或nodemon ./bin/www
命令。
stdio
部分为子进程中的 stdin、stdout、stderr 配置管道。
【讨论】:
以上是关于在 Windows cmd 中使用 $NODE_ENV 和 if 条件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用命令提示符 (cmd) 在 Windows 中列出文件。我尝试在 Linux 中使用“ls”,但它显示错误? [关闭]