摘要:是的,就是這樣的錯(cuò)很快就發(fā)布了修正。各種擔(dān)憂質(zhì)疑指向社區(qū)一直提倡和推動的和理念。得救之道,就在其中在的里回復(fù)說不要依賴于其他人,附了關(guān)于的鏈接,并且最后再次強(qiáng)調(diào)依然是合理的哲學(xué)。解除了用戶為你的代碼打包的負(fù)擔(dān)。
前情提要
今天 npm 圈子雞犬不寧,原因是一個(gè)不過 11 行的工具函數(shù) left-pad 被作者從 npm 上撤下,所有直接和間接依賴它的包就這么齊刷刷掛了,包括 babel 和 react-native 這樣每天安裝數(shù)萬的熱門項(xiàng)目。
而 Azer 刪除他所有的 npm 包又是另一個(gè)故事:Azer 寫了一個(gè)工具叫 kik 發(fā)布在 npm 上,這天有個(gè)同名的公司律師找上門要求他刪掉,Azer 不從,這律師就找上 npm,npm 把包的管理權(quán)限轉(zhuǎn)給了這家公司——當(dāng)然,Azer 就怒了,從 npm 上解放了所有自己發(fā)布的包。
是的,就是這樣 ╮(╯_╰)╭
small module 的錯(cuò)?babel 很快就發(fā)布了修正。然而拋開這兩個(gè)故事不去討論,鑒于現(xiàn)在各種組件的依賴樹之深,這件事暴露出的問題(一直都在,只是沒有這么痛地領(lǐng)悟過)已經(jīng)讓人無法安心地 npm install 了——更多的項(xiàng)目都不可能像 babel 這樣活躍,第一時(shí)間發(fā)布修正。
各種擔(dān)憂、質(zhì)疑指向 npm 社區(qū)一直提倡和推動的 small module 和 semver 理念。這個(gè)方向錯(cuò)了么?也有人怪罪 npm unpublish 是萬惡之源,這么想就有點(diǎn)表面了。
得救之道,就在其中Isaacs 在 left-pad 的 Issue 里回復(fù)說“不要依賴于其他人”,附了關(guān)于 bundledDependencies 的鏈接,并且最后再次強(qiáng)調(diào) small module 依然是合理的哲學(xué)。
這篇回復(fù)其實(shí)比較含糊,甚至看上去有點(diǎn)矛盾。Rollup 作者講得更明白些,解決之道就一句話:
無論你是否面向?yàn)g覽器,將所有依賴都打包進(jìn)最終的發(fā)布代碼。
這么做將使你的項(xiàng)目僅僅在打包的時(shí)候依賴那些 dependencies,一旦發(fā)布完成,就不再需要依賴樹上的所有作者們保持他們的任何承諾。這就是 Isaacs 所說:不要依賴于其他 人。
事實(shí)上 Atom 也在受影響之列,但除了 Atom 的開發(fā)者之外,用戶是沒有感覺的——就這么簡單。
此原則除了可以解決這次的 left-pad 災(zāi)難之外,還有成堆的好處,哪怕每一項(xiàng)都不是殺手級的,這么堆起來也還是很可觀的:
節(jié)省 npm install 的時(shí)間。依次去下載整個(gè)依賴樹是很耗時(shí)間的,而且還附帶下載了更多的 README、package.json 之類。這些磁盤空間也可以省下來了。
啟動更快。你知道 Nodejs 的 require() 執(zhí)行慢成狗么?
你的包更加可靠。依賴樹中的 bug 不能靠用戶自行 npm update 來修復(fù)了,你得自己重新打包發(fā)版本,但是再也不用擔(dān)心出 left-pad 這種幺蛾子,哪個(gè)更重要?
也更加安全。理論上,npm 托管的那些代碼隨時(shí)可能被注入惡意代碼,比如現(xiàn)在 Azer 撤下來的包,不少已經(jīng)被其他人重新發(fā)布上去,可是天知道都是誰放了些什么代碼……用戶只不過 npm install 了一下。
解除了用戶為你的代碼打包的負(fù)擔(dān)。 負(fù)擔(dān)其實(shí)并不是我們擔(dān)心的,只是如果用戶喜歡用 webpack 打包而我們的代碼是 browserify 圈的呢?PouchDB 就碰上了這種情況。
新的習(xí)慣養(yǎng)成新的習(xí)慣,開始為你發(fā)布的代碼做預(yù)打包吧。bundledDependencies 已經(jīng)等候多時(shí)了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79014.html
摘要:早上刷,看到阮一峰老師發(fā)了條推文今天凌晨,一個(gè)開發(fā)者對公司不滿,了自己的所有模塊。目前,已經(jīng)緊急發(fā)布了不包括該模塊的新版本。在未經(jīng)我允許的情況下,更改了此模塊的所有權(quán)。而作者刪除了如此多的模塊,其中包括在內(nèi)的眾多知名項(xiàng)目都受到了影響。 早上刷 Twitter,看到阮一峰老師發(fā)了條推文: 今天凌晨,一個(gè)開發(fā)者對NPM公司不滿,unpublish了自己的所有模塊。其中包括被廣泛使用的lef...
摘要:原碼補(bǔ)碼和反碼原碼一個(gè)數(shù)在計(jì)算機(jī)中是以二進(jìn)制的形式存在的,其中第一位存放符號正數(shù)為負(fù)數(shù)為。中的位運(yùn)算在中按位操作符會將其操作數(shù)轉(zhuǎn)成補(bǔ)碼形式的有符號位整數(shù)。原文鏈接由扯到中的位運(yùn)算 這個(gè)話題的由來是2016年3月份的時(shí)候 NPM 社區(qū)發(fā)生了‘left-pad’事件,不久后社區(qū)就有人發(fā)布了用來補(bǔ)救的,也是現(xiàn)在大家能用到的 left-pad 庫。 最開始這個(gè)庫的代碼是這樣的。 module....
摘要:當(dāng)前的部分代碼狀態(tài)超時(shí)再縮小了范圍以后,進(jìn)一步進(jìn)行排查。函數(shù)是一個(gè)很簡單的一次性函數(shù),在第一次被觸發(fā)時(shí)調(diào)用函數(shù)。因?yàn)樯鲜鍪褂玫氖?,而非,所以在獲取的時(shí)候,肯定為空,那么這就意味著會繼續(xù)調(diào)用函數(shù)。 有時(shí)候,所見并不是所得,有些包,你需要去翻他的源碼才知道為什么會這樣。 背景 今天調(diào)試一個(gè)程序,用到了一個(gè)很久之前的NPM包,名為formstream,用來將form表單數(shù)據(jù)轉(zhuǎn)換為流的形式進(jìn)行...
摘要:原文鏈接歡迎今天在看新增的部分的時(shí)候剛好看到的這個(gè)方法,好像還挺實(shí)用的,而且也想在正式開始工作之前先找找寫代碼的感覺,于是順手其實(shí)還是花了不少時(shí)間的就實(shí)現(xiàn)了這個(gè)。相關(guān)的用法在上有說明。,練手的目的算是達(dá)到了。 ? 原文 鏈接:歡迎 star. 今天在看 ES7 新增的部分 Api 的時(shí)候剛好看到 padStart 的這個(gè)方法,好像還挺實(shí)用的,而且也想在正式開始工作之前先找找寫代碼的感覺...
閱讀 3029·2023-04-26 02:25
閱讀 2288·2023-04-25 18:05
閱讀 681·2021-09-30 09:57
閱讀 2976·2021-09-27 14:10
閱讀 1693·2019-08-30 15:44
閱讀 1039·2019-08-29 15:28
閱讀 2559·2019-08-29 14:10
閱讀 2292·2019-08-29 13:30