我有一个git-hook,如果有新东西要掌握,它应该使npm版本预发行。
因此,为了不受环境影响,我决定为此使用Nodejs。
首先,我尝试使用child_process(spawn和exec),但是后来我发现了shelljs,这实际上是我所需要的。
#! /usr/bin/env node
var shell = require("shelljs");
shell.set('-e');
var branch = shell.exec('git rev-parse --abbrev-ref HEAD').stdout;
if (branch.trim() == "master") {
var prerelease = shell.exec('npm version prerelease').stdout;
console.log('prerelease: ' + prerelease);
shell.exec('git push --no-verify');
console.log('done');
}
shell.exit(0);
我的问题是,尽管已显示出他已完成的指示符(在5.80秒内完成),但脚本始终在执行npm版本预发布时挂起。该过程一直等待到超时,然后返回在此过程中缓冲的日志。
$ git push
husky > pre-push (node v8.11.2)
master
yarn run v1.5.1
$ npm version prerelease
v1.0.0-55
Done in 5.80s.
prerelease: yarn run v1.5.1
$ npm version prerelease
v1.0.0-55
Done in 5.80s.
To https://git.repository.com/dummy/dummyproject.git
34e3bg3..9cf5241 master -> master
除了设置较低的超时时间以外,有人知道我能做什么吗?
有趣的是,这仅在npm调用中发生。将npm -v替换为npm预发行版也将挂起,直到超时。
编辑:如果我直接通过CLI(我使用git bash)(节点script.js)调用CLI脚本,则npm版本预发行版的执行不会挂起。