preinstall 不在 install 前执行?npm 花了五年才想明白

今天刷 GitHub 的时候,发现一个老朋友终于被关掉了。

https://github.com/npm/cli/issues/2660

这个 Issue 是 2021 年 2 月创建的,讨论的是一个很离谱的问题:

preinstall 这个 Hook,居然不是在 install 之前执行的。

按名字理解,preinstall 不应该是先执行吗?

结果 npm 7 开始,它变成了依赖安装完成后才执行。


我第一次知道这个 Issue 是在 2022 年做项目的时候。

当时项目里刚好踩到了这个坑。

查了半天,最后一路顺藤摸瓜找到了这个 Issue。

点进去一看,好家伙,已经有人在 2021 年提出来了,而且还被打上了 Bug、Priority 1、High Priority 等标签。

看到这里,我心想:

既然都已经确认是 Bug 了,那应该快修了吧?

于是顺手在评论区留了一句:

Why not fix this bug instead?

https://github.com/npm/cli/issues/2660#issuecomment-1336976732

然后继续干活去了。


后来几年里,我偶尔会想起这个问题,然后点进去看看。

结果每次看到的都是:

Open.

还是 Open.

依然 Open.

时间久了甚至开始怀疑:

这不会要变成 npm 的历史遗留问题了吧?


结果前几天再打开的时候,发现它终于被修了。

PR:

https://github.com/npm/cli/pull/9267

Issue 关闭:

https://github.com/npm/cli/issues/2660#issuecomment-3710031919

我回头看了一眼时间线:

  • 2021 年,Issue 创建
  • 2022 年,我踩坑并留言吐槽
  • 2026 年,PR 合并,Issue 关闭

整整五年。


这件事其实挺有意思的。

很多人对开源社区有一种天然滤镜,总觉得:

代码都开源了,发现问题、提个 Issue,很快就会有人修。

但现实往往不是这样。

尤其是大型基础设施项目。

哪怕是 npm 这种每天被无数开发者使用的项目,一个已经被确认的 Bug,也可能在 Issue 里躺上好几年。

不是因为没人知道。

而是因为没人有时间。

没人有精力。

或者没人愿意承担改动之后带来的兼容性风险。

Comments (0)

Loading session...