将标志值传递给节点脚本

时间:2017-11-21 19:07:48

标签: git bash npm

我正在创建一个脚本来运行整个'build and push to 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'提交消息#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”将我的代码推送到我的存储区。

1 个答案:

答案 0 :(得分: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"