【问题标题】:Passing multiple named arguments to package.json script将多个命名参数传递给 package.json 脚本
【发布时间】:2018-07-29 17:11:42
【问题描述】:

我有一个带有当前三个参数的 webpack 配置,当我通过以下方式调用它时它可以工作:

webpack --env.p1 = "p1_value" --env.p2 = "p2_value" --env.p3 = "p3_value" 

现在我想将该 webpack 命令封装在以下 package.json 脚本中:

"scripts": {

        "prod": "webpack --env.p1 --env.p2 --env.p3"
    }

我必须如何更改该脚本,以便我可以通过以下方式从 CLI 调用它

npm run prod p1="p1_value" p2="p2_value" p3="p3_value" 

(命名参数是必不可少的,因为我需要能够使用 webpack 配置中的默认值?)

【问题讨论】:

  • 我相信你必须用双破折号-- 分割 npm 脚本参数和 CLI 命令参数。示例:npm run prod -- --env.p1 --env.p2 --env.p3

标签: npm webpack package.json


【解决方案1】:

您可以使用占位符 ${@:1} 将提供给 npm 命令的任何参数传递给 webpack。

package.json

"scripts": {
  "prod": "webpack ${@:1}"
}

在命令行中,使用-- 作为分隔符添加要传递的参数,如下所示:

npm run prod -- --env.p1="p1_value" --env.p2="p2_value" --env.p3="p3_value" 

【讨论】:

  • 谢谢 - npm cli 有更短的版本吗?我不介意脚本的冗长,无论如何它都被封装了。 CLI 部分很重要,因为这是客户需要定期调用的部分。那么有没有办法使用 npm run prod p1="p1_value" p2="p2_value" p3="p3_value" 等,正如我在原始问题中所问的那样?
  • 恐怕不是,双破折号是向 npm 脚本传递参数的“npm 方式”
  • @PatrickHund 使用什么 npm 版本?我试过了,它给了我“糟糕的替代”。我尝试的是"foo": "echo ${@:1}",然后调用yarn run foo bar。用 npm 也用双破折号npm run foo -- bar 进行了尝试。更新:当使用"foo": "echo $1" 时,它起作用了。知道为什么吗?
  • @HossamEl-Deen 我刚刚对其进行了测试,它适用于 Node 8.9.4、npm 5.8.0。看来您可以省略package.json 中的${@:1} 位,如果没有它,请尝试它是否适合您。确保使用额外的双破折号作为npm run 命令和参数之间的分隔符。
  • @PatrickHund 谢谢。如果删除{@:1},它不会抛出错误。具有相同的节点和 npm 版本。我不太确定问题是脚本由sh 运行,而不是bash。似乎并非所有 shell 都支持这种语法。例如:stackoverflow.com/a/23277604/6690391
猜你喜欢
  • 1970-01-01
  • 2018-10-08
  • 2020-05-09
  • 1970-01-01
  • 2021-04-12
  • 2017-05-08
  • 1970-01-01
相关资源
最近更新 更多