【问题标题】:Pass flag values to node scripts将标志值传递给节点脚本
【发布时间】:2018-05-05 08:58:02
【问题描述】:

我正在创建一个脚本来运行整个“构建并推送到 git”流程。要提交我的更改,我需要包含提交消息,但我希望每次执行都有一个唯一的消息。我可以包含一个 bash 变量,以便用户可以创建消息吗?我基本上想做类似的事情:

//package.json
{
  ...
  "scripts": {
     "build:push2Git $message": "npm run build:local ;
        npm run build:webpack && git add . && git commit -m $message
        && git push origin my-branch || echo 'Failed to push to git'",
        ...
   }
}

然后脚本将作为 `npm run build:push2Git 'commit message #23445' 运行。这可能吗?我意识到我的例子可能非常错误,只是我想解释我想要什么以及我认为它会如何工作。

只是为了更新我厌倦的内容,并将其作为 bash 变量传递是行不通的。

所以我尝试了:

//package.json
{
  ...
  "scripts": {
     "build:push2Git $message": "npm run build:local ;
        npm run build:webpack && git add . && git commit -m '$1'
        && git push origin my-branch || echo 'Failed to push to git'",
        ...
   }
}

然后尝试将其称为 npm run build:push2Git my_custom_message 。不工作。使用提交消息“$1”将我的代码推送到我的存储区。

【问题讨论】:

  • 也试过不加引号,出错了。
  • $message前面的build:push2Git有什么用?这对我来说工作正常:"build:push2Git": "git commit -m $1" 运行时npm run build:push2Git "this is a commit message"
  • 我觉得这是像@betrandmartel 这样的印刷错误。我怀疑 npm 只是在该脚本部分进行查找,然后执行该值。因此,如果您放弃该 $message 它应该可以工作。
  • 也许删除赏金并接受副本?

标签: git bash npm


【解决方案1】:

我不是 npm 编码器,但我知道 bash。试试这个:

//package.json
{
  …
  "scripts": {
     "build:push2Git": "p2g() { npm run build:local ;
        npm run build:webpack && git add . && git commit -m '$@'
        && git push origin my-branch || echo 'Failed to push to git' ; }; p2g",
        …
   }
}

假设可以使用 bash 函数并假设脚本被称为 bash 别名(参数被附加到命令的末尾),这应该允许您以 npm run build:push2Git -- "this is a commit message" 调用脚本。 (另见this answer。)

这将建立一个名为 p2g() 的 shell 函数,感谢 $@ 将吸收您的参数(您真的希望 "$@" 正确保留您的间距,但我不知道如何正确转义或将 JSON 格式化为使这项工作)。参数似乎需要由 -- 分隔。

这是一个不使用函数的更简单的版本:

//package.json
{
  …
  "scripts": {
     "build:push2Git": "git commit",
        …
   }
}

你可以像这样使用这个:npm run build:push2Git -- -m "this is a commit message"

【讨论】:

  • 我会给你答案,因为它让我找到适合我的答案!我对您的建议所做的唯一更改是删除$message,并将“$@1”更改为“$@”。除此之外,这正是我所需要的,谢谢!
  • 当,这是一个错字,对不起。 $message 是您之前代码的错误粘贴。我很高兴你明白了。我已经更新了我的答案(here 是我的答案的最后一个版本,其中有错误)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 2010-12-13
  • 2021-05-01
  • 2012-08-19
相关资源
最近更新 更多