在 npm 脚本中添加 zsh 三元运算符 - 错误替换
Adding zsh ternary operator in npm script - bad subsitution
我想在我的 npm 脚本中使用三元运算符:
"scripts": {
"build" "node ${%(ENVVAR=nope.foo.bar)}.js"
}
这样我就可以像这样使用它了:
ENVVAR=nope yarn build
并获取结果命令:
"node foo.js"
但是我上面的尝试(试过括号和方括号)总是产生 bad substitution
在我的参数扩展中包含三元运算符的正确语法是什么 (zsh shell)
npm docs 状态:
"The actual shell your script is run within is platform dependent. By default, on Unix-like systems it is the /bin/sh
command, on Windows it is the cmd.exe
. The actual shell referred to by /bin/sh
also depends on the system. As of npm@5.1.0 you can customize the shell with the script-shell
configuration."
因此,鉴于 shell npm 在 *nix 上的使用通常 sh
请考虑以下 npm 脚本而不是 (除非当然你的 npm 的 script-shell
实际上已经配置为 zsh
):
"scripts": {
"build": "[[ $ENVVAR = \"nope\" ]] && val=foo || val=bar; node \"${val}.js\""
}
注意: 您可以通过 npm config 命令检查正在使用哪个 shell npm:npm config get script-shell
或者,对于跨平台,无论配置使用哪个 shell npm,考虑评估 node.js 内联脚本 "shells-out " node ...
命令。例如下面的(虽然有点冗长)npm 脚本利用 execSync
:
"scripts": {
"build": "node -e \"const val = process.env.ENVVAR === 'nope' ? 'foo' : 'bar'; require('child_process').execSync('node ' + val + '.js', { stdio: [0,1,2] })\""
}
我想在我的 npm 脚本中使用三元运算符:
"scripts": {
"build" "node ${%(ENVVAR=nope.foo.bar)}.js"
}
这样我就可以像这样使用它了:
ENVVAR=nope yarn build
并获取结果命令:
"node foo.js"
但是我上面的尝试(试过括号和方括号)总是产生 bad substitution
在我的参数扩展中包含三元运算符的正确语法是什么 (zsh shell)
npm docs 状态:
"The actual shell your script is run within is platform dependent. By default, on Unix-like systems it is the
/bin/sh
command, on Windows it is thecmd.exe
. The actual shell referred to by/bin/sh
also depends on the system. As of npm@5.1.0 you can customize the shell with thescript-shell
configuration."
因此,鉴于 shell npm 在 *nix 上的使用通常 sh
请考虑以下 npm 脚本而不是 (除非当然你的 npm 的 script-shell
实际上已经配置为 zsh
):
"scripts": {
"build": "[[ $ENVVAR = \"nope\" ]] && val=foo || val=bar; node \"${val}.js\""
}
注意: 您可以通过 npm config 命令检查正在使用哪个 shell npm:npm config get script-shell
或者,对于跨平台,无论配置使用哪个 shell npm,考虑评估 node.js 内联脚本 "shells-out " node ...
命令。例如下面的(虽然有点冗长)npm 脚本利用 execSync
:
"scripts": {
"build": "node -e \"const val = process.env.ENVVAR === 'nope' ? 'foo' : 'bar'; require('child_process').execSync('node ' + val + '.js', { stdio: [0,1,2] })\""
}