【问题标题】:Adding zsh ternary operator in npm script - bad subsitution在 npm 脚本中添加 zsh 三元运算符 - 错误替换
【发布时间】:2020-11-13 01:50:09
【问题描述】:

我想在我的 npm 脚本中使用三元运算符:

"scripts": {
  "build" "node ${%(ENVVAR=nope.foo.bar)}.js"
}

这样我就可以像这样使用它:

ENVVAR=nope yarn build

并获得以下命令:

"node foo.js"

但是我上面的尝试(尝试过的括号和方括号)总是产生bad substitution

在我的参数扩展中包含三元运算符的正确语法是什么(zsh shell)

【问题讨论】:

    标签: zsh npm-scripts


    【解决方案1】:

    npm docs 状态:

    "运行脚本的实际 shell 取决于平台。默认情况下,在类 Unix 系统上它是 /bin/sh 命令,在 Windows 上是 cmd.exe。实际 shell 指的是/bin/sh 也取决于系统。从npm@5.1.0 开始,您可以使用script-shell 配置自定义shell。"

    因此,鉴于 npm 在 *nix 上使用的 shell 通常是 sh,请考虑使用以下 npm 脚本 (当然,除非您的 npm 的 script-shell 实际上已配置为 @987654332 @):

    "scripts": {
      "build": "[[ $ENVVAR = \"nope\" ]] && val=foo || val=bar; node \"${val}.js\""
    }
    

    注意:您可以通过npm config 命令检查哪个shell npm 正在使用:npm config get script-shell

    或者,对于跨平台,无论 npm 配置为使用哪个 shell,请考虑评估一个 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] })\""
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2018-04-11
      • 2014-05-03
      • 2017-05-12
      • 2012-11-19
      • 1970-01-01
      相关资源
      最近更新 更多