解围之道,就在个中——关于此次的 kik,left-pad,和 npm 事宜

前情提纲

本日 npm 圈子鸡飞狗跳,原因是一个不过 11 行的东西函数 left-pad 被作者从 npm 上撤下,一切直接和间接依靠它的包就这么齐刷刷挂了,包含 babel 和 react-native 如许天天装置数万的热点项目。

而 Azer 删除他一切的 npm 包又是另一个故事:Azer 写了一个东西叫 kik 宣布在 npm 上,是日有个同名的公司状师找上门请求他删掉,Azer 不从,这状师就找上 npm,npm 把包的管理权限转给了这家公司——固然,Azer 就怒了,从 npm 上解放了一切本身宣布的包。

是的,就是如许 ╮(╯_╰)╭

small module 的错?

babel 很快就宣布了修改。然则抛开这两个故事不去议论,鉴于如今种种组件的依靠树之深,这件事暴露出的题目(一向都在,只是没有这么痛地意会过)已让人没法安心肠 npm install 了——更多的项目都不能够像 babel 如许活泼,第一时候宣布修改。

种种忧郁、质疑指向 npm 社区一向首倡和推进的 small module 和 semver 理念。这个方向错了么?也有人见怪 npm unpublish 是万恶之源,这么想就有点外表了。

解围之道,就在个中

Isaacs 在 left-pad 的 Issue 里复兴说“不要依靠于其他人”,附了关于 bundledDependencies 的链接,而且末了再次强调 small module 依然是合理的哲学。

这篇复兴实在比较暧昧,以至看上去有点抵牾。Rollup 作者讲得更邃晓些,处理之道就一句话:

不管你是不是面向浏览器,将一切依靠都打包进终究的宣布代码。

这么做将使你的项目仅仅在打包的时刻依靠那些 dependencies,一旦宣布完成,就不再须要依靠树上的一切作者们坚持他们的任何许诺。这就是 Isaacs 所说:不要依靠于其他

事实上 Atom 也在受影响之列,但除了 Atom 的开发者以外,用户是没有感觉的——就这么简朴。

此准绳除了能够处理此次的 left-pad 灾害以外,另有成堆的优点,哪怕每一项都不是杀手级的,这么堆起来也照样很可观的:

  • 节约 npm install 的时候。顺次去下载全部依靠树是很耗时候的,而且还附带下载了更多的 README、package.json 之类。这些磁盘空间也能够省下来了。

  • 启动更快。你晓得 Nodejs 的 require() 实行慢成狗么?

  • 你的包越发牢靠。依靠树中的 bug 不能靠用户自行 npm update 来修复了,你得本身从新打包发版本,然则再也不必忧郁出 left-pad 这类么蛾子,哪一个更主要?

  • 也越发平安。理论上,npm 托管的那些代码随时能够被注入恶意代码,比方如今 Azer 撤下来的包,不少已被其他人从新宣布上去,但是天晓得都是谁放了些什么代码……用户只不过 npm install 了一下。

  • 解除了用户为你的代码打包的累赘。 累赘实在并非我们忧郁的,只是假如用户喜好用 webpack 打包而我们的代码是 browserify 圈的呢?PouchDB 就碰上了这类状况

新的习气

养成新的习气,最先为你宣布的代码做预打包吧。bundledDependencies 已等候多时了。

    原文作者:Amio
    原文地址: https://segmentfault.com/a/1190000004672227
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞