npm

npm(全称 Node Package Manager,即“node管理器”)是Node.js預設的、用JavaScript編寫的軟體套件管理系統

npm
開發者艾萨克·施吕特、福里斯特·诺维尔、罗伯特·科瓦尔斯基、多梅尼克·德尼科拉、蒂姆·奥克斯利、埃文·马尔等
当前版本
  • 10.5.0 (2024年2月28日;穩定版本)[1]
源代码库
编程语言JavaScript
平台Linux
macOS
Windows
许可协议
网站www.npmjs.com/ 编辑维基数据

历史

npm完全用JavaScript写成,最初由艾萨克·施吕特(Isaac Z. Schlueter)开发。艾萨克表示自己意识到“模块管理很糟糕”的问题,并看到了PHPPEARPerlCPAN等软件的缺点,于是编写了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]

使用

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月,Brandon Nozaki Miller發布了包含惡意代碼的 node-ipc 套件版本。使用 node-ipcVue.js 沒有將其套件固定到安全版本,這意味著 Vue.js 的部分用戶可能會受到惡意代碼的影響。[17]

参考文献

  1. . 2024年2月28日 [2024年3月8日].
  2. Schlueter, Isaac Z. . GitHub. 25 March 2013 [2015-01-05]. (原始内容存档于2015-05-08).
  3. Dierx, Peter. . sitepoint. 30 March 2016 [22 July 2016]. (原始内容存档于2017-02-04).
  4. Ampersand.js. . ampersandjs.com. [22 July 2016]. (原始内容存档于2016-10-04).
  5. Ojamaa, Andres; Duuna, Karl. . IEEE Xplore. 2012 [22 July 2016]. (原始内容存档于2019-10-18).
  6. Kennedy, Hugh; DeVay, Paul. . Nsight. [22 July 2016]. (原始内容存档于2016年7月8日).
  7. Yegulalp, Serdar. . InfoWorld. 23 March 2016 [22 July 2016]. (原始内容存档于2016-12-05).
  8. Williams, Chris. . The Register. [17 April 2016]. (原始内容存档于2016-03-24).
  9. npm, Inc. . npm. [22 October 2016]. (原始内容存档于2016-10-22).
  10. . [2016-12-07]. (原始内容存档于2016-08-11).
  11. Ellingwood, Justin. . DigitalOcean. [22 October 2016]. (原始内容存档于2016-10-22).
  12. . docs.npmjs. [22 October 2016]. (原始内容存档于2016-12-03).
  13. . docs.npmjs. [22 October 2016]. (原始内容存档于2016-12-03).
  14. . docs.npm. [29 October 2016]. (原始内容存档于2016-12-03).
  15. Williams, Chris; Chief, Editor in. . www.theregister.com. [2023-09-10]. (原始内容存档于2023-10-16) (英语).
  16. . blog.npmjs.org. [2023-09-10]. (原始内容存档于2023-06-23).
  17. . BleepingComputer. [2023-09-10]. (原始内容存档于2022-03-17) (美国英语).

外部連結

参见

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.