npm(全稱 Node Package Manager,即“node包管理器”)是Node.js默認的、以JavaScript編寫的軟件包管理系統。
npm完全用JavaScript寫成,最初由艾薩克·施呂特(Isaac Z. Schlueter)開發。艾薩克表示自己意識到“模塊管理很糟糕”的問題,并看到了PHP的PEAR與Perl的CPAN等軟件的缺點,于是編寫了npm。
2020年3月16 日,GitHub CEO Nat Friedman 宣布 GitHub 已簽署收購 NPM(npm 背后的公司)的協議,并表示 npm 加入 GitHub 后會繼續免費提供公共軟件注冊中心服務。
npm會隨著Node.js自動安裝。npm模塊倉庫提供了一個名為“registry”的查詢服務,用戶可通過本地的npm命令下載并安裝指定模塊。此外用戶也可以通過npm把自己設計的模塊分發到registry上面。
registry上面的模塊通常采用CommonJS格式,而且都包含一個JSON格式的元文件。截止到2016年7月,npm的registry上面已經注冊了超過280,000個模塊。
npm的模塊以“先到先得”的原則注冊,各模塊作者不會發生混亂。然而一旦有人撤回自己發布的模塊,那么不僅會使依賴那個模塊的項目出現問題,還會帶來安全風險。例如有一個模塊叫做“left-pad”,其中只有一個字符串對齊的功能。但是,當作者把它從registry里面移除之后,許多模塊便無法正確構建。
npm的registry沒有審核機制,因此會存在一些低質量、不安全甚至有害的模塊,不過npm服務器的管理員也可以刪除有害模塊并阻止不懷好意的用戶。
另外也有人為npm制作了統計功能,這樣可以讓開發者了解各模塊的使用情況,幫助他們選擇合適的模塊。
NPM 使用
npm可以管理本地項目的所需模塊并自動維護依賴情況,也可以管理全局安裝的JavaScript工具。
如果一個項目中存在package.json文件,那么用戶可以直接使用npm install命令自動安裝和維護當前項目所需的所有模塊。在package.json文件中,開發者可以指定每個依賴項的版本范圍,這樣既可以保證模塊自動更新,又不會因為所需模塊功能大幅變化導致項目出現問題。開發者也可以選擇將模塊固定在某個版本之上。
NPM 官網
NPM 英文官方網站:https://www.npmjs.com/