npm scripts/package.json - 仅当当前在 git master 分支上运行

Cal*_*v J 3 git npm npm-scripts

我正在尝试制作一个脚本,该脚本仅在 master 是当前签出的分支时才运行...

我设法通过以下方式获取了分支名称:

git rev-parse --symbolic-full-name --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)

但是把它放在一个脚本中,检查它的价值并根据它做一件事或其他事情并不顺利

"foo": "set branch=git rev-parse --symbolic-full-name --abbrev-ref HEAD | if [branch==master]; then echo \"yes\"; else echo \"no\"; fi;"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Rob*_*obC 7

以下将成功运行:

npm 脚本:

"scripts": {
  "foo": "branch=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD); if [[ $branch == \"master\" ]]; then echo \"yes\"; else echo \"no\"; fi;"
},
Run Code Online (Sandbox Code Playgroud)

解释:

  • git命令被包裹在$()-其被称为命令替换。这意味着它将运行git rev-parse ...命令并将其输出分配给branch变量。
  • 随后,使用以下方法对branch值进行条件检查:if [[ $branch == \"master\" ]]; then ...

跨平台:

如果npm run foo在非 Bash 环境(例如 Windowscmd.exePowerShell )中执行命令,这显然会失败。如果需要跨平台支持(我猜不是!),那么我建议在node.js脚本中处理此逻辑并child_process.execSync()用于调用git命令。该node.js然后可以通过您的NPM-脚本调用。