资讯专栏INFORMATION COLUMN

得救之道,就在其中——关于这次的 kik,left-pad,和 npm 事件

gaara / 1908人阅读

摘要:是的,就是这样的错很快就发布了修正。各种担忧质疑指向社区一直提倡和推动的和理念。得救之道,就在其中在的里回复说不要依赖于其他人,附了关于的链接,并且最后再次强调依然是合理的哲学。解除了用户为你的代码打包的负担。

前情提要

今天 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 已经等候多时了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79014.html

相关文章

  • 开发者对 npm 公司不满,unpublish 了自己所有模块

    摘要:早上刷,看到阮一峰老师发了条推文今天凌晨,一个开发者对公司不满,了自己的所有模块。目前,已经紧急发布了不包括该模块的新版本。在未经我允许的情况下,更改了此模块的所有权。而作者删除了如此多的模块,其中包括在内的众多知名项目都受到了影响。 早上刷 Twitter,看到阮一峰老师发了条推文: 今天凌晨,一个开发者对NPM公司不满,unpublish了自己的所有模块。其中包括被广泛使用的lef...

    Salamander 评论0 收藏0
  • left-pad扯到JS中位运算

    摘要:原码补码和反码原码一个数在计算机中是以二进制的形式存在的,其中第一位存放符号正数为负数为。中的位运算在中按位操作符会将其操作数转成补码形式的有符号位整数。原文链接由扯到中的位运算 这个话题的由来是2016年3月份的时候 NPM 社区发生了‘left-pad’事件,不久后社区就有人发布了用来补救的,也是现在大家能用到的 left-pad 库。 最开始这个库的代码是这样的。 module....

    LeoHsiun 评论0 收藏0
  • Node程序debug小记

    摘要:当前的部分代码状态超时再缩小了范围以后,进一步进行排查。函数是一个很简单的一次性函数,在第一次被触发时调用函数。因为上述使用的是,而非,所以在获取的时候,肯定为空,那么这就意味着会继续调用函数。 有时候,所见并不是所得,有些包,你需要去翻他的源码才知道为什么会这样。 背景 今天调试一个程序,用到了一个很久之前的NPM包,名为formstream,用来将form表单数据转换为流的形式进行...

    Achilles 评论0 收藏0
  • padStart polyfill

    摘要:原文链接欢迎今天在看新增的部分的时候刚好看到的这个方法,好像还挺实用的,而且也想在正式开始工作之前先找找写代码的感觉,于是顺手其实还是花了不少时间的就实现了这个。相关的用法在上有说明。,练手的目的算是达到了。 ? 原文 链接:欢迎 star. 今天在看 ES7 新增的部分 Api 的时候刚好看到 padStart 的这个方法,好像还挺实用的,而且也想在正式开始工作之前先找找写代码的感觉...

    edgardeng 评论0 收藏0

发表评论

0条评论

gaara

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<