npm安装(在预安装时正常停止进程)



如何在预安装脚本中(有条件地(停止npm install

目前我有一个预安装脚本preinstall.js:

if (someCondition) {
process.kill(process.ppid, 'SIGKILL');
}

package.json:

{
"scripts": {
"preinstall": "node preinstall"
}
}

然而,这将导致:

npm ERR! code ELIFECYCLE
npm ERR! errno 1

我想优雅地退出这个过程。

有什么想法吗?

阻止安装节点包的最佳做法是从预安装脚本返回非零退出代码。

您仍然会得到一堆npm ERR消息,但它不会像您共享的process.kill选项那样杀死npm进程,并且会得到一个正确的npm日志。

也就是说,在preinstall.js中,你可以有这样的东西:

if (someCondition) {
console.error('someCondition happened, aborting installation');
process.exit(1);
}

当满足someCondition时,你会看到这样的东西:

$ npm install ~/src/untracked/mypkg/mypkg-1.0.0.tgz
> mypkg@1.0.0 preinstall C:Usersallonsrcgitsamplenodenode_modulesmypkg
> node preinstall
someCondition happened, aborting installation
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! mypkg@1.0.0 preinstall: `node preinstall`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the mypkg@1.0.0 preinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR!     /home/users/mureinik/.npm-cache/_logs/2020-11-29T09_58_46_179Z-debug.log

编辑:
从答案正文中的评论中捕捉讨论,这样更容易发现其他人是否遇到了相同的问题。这里的目标是使特定包的安装失败,而不会使整个npm install过程失败。这种行为不能由预安装脚本控制(只能控制它所属的包是否成功安装(,但如果在package.jsonoptionalDependencies部分中列出了依赖项,则可以实现。

最新更新