摘要:是的,就是這樣的錯很快就發布了修正。各種擔憂質疑指向社區一直提倡和推動的和理念。得救之道,就在其中在的里回復說不要依賴于其他人,附了關于的鏈接,并且最后再次強調依然是合理的哲學。解除了用戶為你的代碼打包的負擔。
前情提要
今天 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 已經等候多時了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79014.html
摘要:早上刷,看到阮一峰老師發了條推文今天凌晨,一個開發者對公司不滿,了自己的所有模塊。目前,已經緊急發布了不包括該模塊的新版本。在未經我允許的情況下,更改了此模塊的所有權。而作者刪除了如此多的模塊,其中包括在內的眾多知名項目都受到了影響。 早上刷 Twitter,看到阮一峰老師發了條推文: 今天凌晨,一個開發者對NPM公司不滿,unpublish了自己的所有模塊。其中包括被廣泛使用的lef...
摘要:原碼補碼和反碼原碼一個數在計算機中是以二進制的形式存在的,其中第一位存放符號正數為負數為。中的位運算在中按位操作符會將其操作數轉成補碼形式的有符號位整數。原文鏈接由扯到中的位運算 這個話題的由來是2016年3月份的時候 NPM 社區發生了‘left-pad’事件,不久后社區就有人發布了用來補救的,也是現在大家能用到的 left-pad 庫。 最開始這個庫的代碼是這樣的。 module....
摘要:當前的部分代碼狀態超時再縮小了范圍以后,進一步進行排查。函數是一個很簡單的一次性函數,在第一次被觸發時調用函數。因為上述使用的是,而非,所以在獲取的時候,肯定為空,那么這就意味著會繼續調用函數。 有時候,所見并不是所得,有些包,你需要去翻他的源碼才知道為什么會這樣。 背景 今天調試一個程序,用到了一個很久之前的NPM包,名為formstream,用來將form表單數據轉換為流的形式進行...
摘要:原文鏈接歡迎今天在看新增的部分的時候剛好看到的這個方法,好像還挺實用的,而且也想在正式開始工作之前先找找寫代碼的感覺,于是順手其實還是花了不少時間的就實現了這個。相關的用法在上有說明。,練手的目的算是達到了。 ? 原文 鏈接:歡迎 star. 今天在看 ES7 新增的部分 Api 的時候剛好看到 padStart 的這個方法,好像還挺實用的,而且也想在正式開始工作之前先找找寫代碼的感覺...
閱讀 2976·2023-04-26 02:25
閱讀 2249·2023-04-25 18:05
閱讀 647·2021-09-30 09:57
閱讀 2943·2021-09-27 14:10
閱讀 1652·2019-08-30 15:44
閱讀 1003·2019-08-29 15:28
閱讀 2524·2019-08-29 14:10
閱讀 2263·2019-08-29 13:30