You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

npm postinstall脚本执行成功但npm install报错终止问题

问题解决:postinstall脚本执行成功但npm install抛出SIGINT错误

错误原因

你的postinstall脚本虽然完成了数据库写入,但Node.js进程没有正常退出。因为脚本中存在未关闭的数据库连接(或其他未释放的资源),导致进程一直处于活跃状态,npm等待超时后发送SIGINT信号终止进程,最终触发安装报错。

解决方案

修改data.js,确保数据库操作完成后关闭连接,并显式让脚本正常退出:

场景1:saveDataToDatabase返回Promise

let db = require('../../../db');

let obj = {
    name: 'the name',
    id: 'some id',
    description: 'description'
};

// 等待数据库操作完成,关闭连接后退出
db.saveDataToDatabase(obj)
  .then(() => db.close())
  .then(() => process.exit(0)) // 正常退出,返回码0表示成功
  .catch(err => {
    console.error('数据库操作失败:', err);
    process.exit(1); // 异常退出,返回非0码告知npm出错
  });

场景2:saveDataToDatabase使用回调函数

let db = require('../../../db');

let obj = {
    name: 'the name',
    id: 'some id',
    description: 'description'
};

db.saveDataToDatabase(obj, (err) => {
  if (err) {
    console.error('数据库操作失败:', err);
    process.exit(1);
  } else {
    // 先关闭数据库连接,再退出脚本
    db.close(() => process.exit(0));
  }
});

关键说明

  • npm要求postinstall脚本必须以正常退出码0结束,否则会判定为执行失败。
  • Node.js进程不会自动退出,直到所有异步任务完成、所有资源(如数据库连接)被释放。如果你的数据库客户端默认保持长连接,必须显式关闭。
  • 显式调用process.exit(0)可以确保脚本在任务完成后立即终止,避免npm等待超时。

内容的提问来源于stack exchange,提问作者Harald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:48:48