在 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] })\""
}