如何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
> [email protected] preinstall C:\Users\allon\src\git\samplenode\node_modules\mypkg
> node preinstall
someCondition happened, aborting installation
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] preinstall: `node preinstall`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] 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
过程失败。此行为不能由预安装脚本控制(该脚本只能控制是否成功安装了该软件包),但是如果依赖关系列在中,则可以实现optionalDependencies
此行为package.json
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句