热门问题
时间线
聊天
视角
npm
Node包管理器 来自维基百科,自由的百科全书
Remove ads
npm(全稱 Node Package Manager,即「node套件管理器」)是Node.js預設的、用JavaScript編寫的軟體套件管理系統。
歷史
npm完全用JavaScript寫成,最初由艾薩克·施呂特(Isaac Z. Schlueter)開發。艾薩克表示自己意識到「模塊管理很糟糕」的問題,並看到了PHP的PEAR與Perl的CPAN等軟件的缺點,於是編寫了npm。[2]
2020年3月16日,GitHub CEO Nat Friedman 宣布 GitHub 已簽署收購 NPM(npm 背後的公司)的協議,並表示 npm 加入 GitHub 後會繼續免費提供公共軟件註冊中心服務。
說明
npm會隨着Node.js自動安裝[3]。npm模塊儲存庫提供了一個名為「registry」的查詢服務,用戶可通過本地的npm命令下載並安裝指定模塊。此外用戶也可以通過npm把自己設計的模塊分發到registry上面[4]。
registry上面的模塊通常採用CommonJS格式,而且都包含一個JSON格式的元文件[5]。截至2016年7月,npm的registry上面已經註冊了超過280,000個模塊[6]。
npm的模塊以「先搶先贏」的原則註冊,各模塊作者不會發生混亂。然而一旦有人撤回自己發布的模塊,那麼不僅會使依附那個模塊的項目出現問題,還會帶來安全風險[7]。例如有一個模組叫做「left-pad」,其中只有一個字串對齊的功能。但是,當作者把它從registry裡面移除之後,許多模組便無法正確組建[8]。
npm的registry沒有審核機制,因此會存在一些低質量、不安全甚至有害的模塊[5],然而npm服務器的管理員也可以刪除有害模塊並阻止不懷好意的用戶[9]。
另外也有人為npm製作了統計功能,這樣可以讓開發者了解各模塊的使用情況,幫助他們選擇合適的模塊。[10]
Remove ads
使用
npm可以管理本地項目的所需模塊並自動維護相依性,也可以管理全局安裝的JavaScript工具[11]。
如果一個項目中存在package.json
文件,那麼用戶可以直接使用npm install
命令自動安裝和維護當前項目所需的所有模塊[12]。在package.json
文件中,開發者可以指定每個相依項的版本範圍,這樣既可以保證模塊自動更新,又不會因為所需模塊功能大幅變化導致項目出現問題[13]。開發者也可以選擇將模塊固定在某個版本之上[14]。
在中國大陸,由於防火長城的干擾,開發者可能需要更換軟件源才能正常下載和安裝模塊。
意外
2016年3月,Azer Koçulu移除了他受歡迎的 left-pad
套件。儘管 left-pad
在三小時後重新發布,但它造成了廣泛的破壞。[15]npm之後修改了有關政策,以防止將來發生類似事件。[16]
2022年3月,布蘭登·野崎·米勒發布了包含惡意代碼的 node-ipc
套件版本。使用 node-ipc
的 Vue.js 沒有將其套件固定到安全版本,這意味著 Vue.js 的部分用戶可能會受到惡意代碼的影響。[17]
參考文獻
外部連結
參見
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads