Npm:修订间差异
无编辑摘要 |
补救1个来源,并将0个来源标记为失效。 #IABot (v1.6.5) |
||
第41行: | 第41行: | ||
npm会随着Node.js自动安装<ref name="dierx16">{{cite web|last1=Dierx|first1=Peter|title=A Beginner's Guide to npm — the Node Package Manager|url=https://www.sitepoint.com/beginners-guide-node-package-manager/|website=sitepoint|accessdate=22 July 2016|date=30 March 2016}}</ref>。npm模块仓库提供了一个名为“registry”的查询服务,用户可通过本地的npm命令下载并安装指定模块。此外用户也可以通过npm把自己设计的模块分发到registry上面<ref name="ampersandjs">{{cite web|last1=Ampersand.js|title=Ampersand.js - Learn|url=https://ampersandjs.com/learn/npm-browserify-and-modules/|website=ampersandjs.com|accessdate=22 July 2016}}</ref>。 |
npm会随着Node.js自动安装<ref name="dierx16">{{cite web|last1=Dierx|first1=Peter|title=A Beginner's Guide to npm — the Node Package Manager|url=https://www.sitepoint.com/beginners-guide-node-package-manager/|website=sitepoint|accessdate=22 July 2016|date=30 March 2016}}</ref>。npm模块仓库提供了一个名为“registry”的查询服务,用户可通过本地的npm命令下载并安装指定模块。此外用户也可以通过npm把自己设计的模块分发到registry上面<ref name="ampersandjs">{{cite web|last1=Ampersand.js|title=Ampersand.js - Learn|url=https://ampersandjs.com/learn/npm-browserify-and-modules/|website=ampersandjs.com|accessdate=22 July 2016}}</ref>。 |
||
registry上面的模块通常采用[[CommonJS]]格式,而且都包含一个[[JSON]]格式的元文件<ref name="OjamaaDuuna12">{{cite journal|last1=Ojamaa|first1=Andres|last2=Duuna|first2=Karl|title=Assessing the Security of Node.js Platform|journal=IEEE Xplore|date=2012|url=http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6470829|accessdate=22 July 2016}}</ref>。截止到2016年7月,npm的registry上面已经注册了超过280,000个模块<ref name="KennedyDevay16">{{cite web|last1=Kennedy|first1=Hugh|last2=DeVay|first2=Paul|title=Understanding npm|url=https://unpm.nodesource.com/|website=Nsight|accessdate=22 July 2016}}</ref>。 |
registry上面的模块通常采用[[CommonJS]]格式,而且都包含一个[[JSON]]格式的元文件<ref name="OjamaaDuuna12">{{cite journal|last1=Ojamaa|first1=Andres|last2=Duuna|first2=Karl|title=Assessing the Security of Node.js Platform|journal=IEEE Xplore|date=2012|url=http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6470829|accessdate=22 July 2016}}</ref>。截止到2016年7月,npm的registry上面已经注册了超过280,000个模块<ref name="KennedyDevay16">{{cite web|last1=Kennedy|first1=Hugh|last2=DeVay|first2=Paul|title=Understanding npm|url=https://unpm.nodesource.com/|website=Nsight|accessdate=22 July 2016|deadurl=yes|archiveurl=https://web.archive.org/web/20160708000406/https://unpm.nodesource.com/|archivedate=2016年7月8日}}</ref>。 |
||
npm的模块以“先到先得”的原则注册,各模块作者不会发生混乱。然而一旦有人撤回自己发布的模块,那么不仅会使依赖那个模块的项目出现问题,还会带来安全风险<ref name="Yegulalp16">{{cite web|last1=Yegulalp|first1=Serdar|title=How one yanked JavaScript package wreaked havoc|url=http://www.infoworld.com/article/3047177/javascript/how-one-yanked-javascript-package-wreaked-havoc.html|website=InfoWorld|accessdate=22 July 2016|date=23 March 2016}}</ref>。例如有一個模組叫做「left-pad」,其中只有一個字串對齊的功能。但是,當作者把它從registry裡面移除之後,許多模組便無法正確構建<ref>{{cite news|last1=Williams|first1=Chris|title=How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript|url=http://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/|accessdate=17 April 2016|work=The Register}}</ref>。 |
npm的模块以“先到先得”的原则注册,各模块作者不会发生混乱。然而一旦有人撤回自己发布的模块,那么不仅会使依赖那个模块的项目出现问题,还会带来安全风险<ref name="Yegulalp16">{{cite web|last1=Yegulalp|first1=Serdar|title=How one yanked JavaScript package wreaked havoc|url=http://www.infoworld.com/article/3047177/javascript/how-one-yanked-javascript-package-wreaked-havoc.html|website=InfoWorld|accessdate=22 July 2016|date=23 March 2016}}</ref>。例如有一個模組叫做「left-pad」,其中只有一個字串對齊的功能。但是,當作者把它從registry裡面移除之後,許多模組便無法正確構建<ref>{{cite news|last1=Williams|first1=Chris|title=How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript|url=http://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/|accessdate=17 April 2016|work=The Register}}</ref>。 |
2018年5月20日 (日) 12:43的版本
開發者 | 艾萨克·施吕特、福里斯特·诺维尔、罗伯特·科瓦尔斯基、多梅尼克·德尼科拉、蒂姆·奥克斯利、埃文·马尔等 |
---|---|
当前版本 | 5.6.0(2017年11月28日[1]) |
源代码库 | |
编程语言 | JavaScript |
平台 | Linux macOS Windows |
许可协议 | 艺术许可协议 2.0 |
网站 | www |
npm(全称 Node Package Manager,即“node包管理器”)是Node.js預設的、以JavaScript編寫的軟體套件管理系統。
历史
npm完全用JavaScript写成,最初由艾萨克·施吕特(Isaac Z. Schlueter)开发。艾萨克表示自己意识到“模块管理很糟糕”的问题,并看到了PHP的PEAR与Perl的CPAN等软件的缺点,于是编写了npm。[2]
说明
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]。
参考文献
- ^ Release v5.6.0 · npm/npm. GitHub. 2017-11-28.
- ^ Schlueter, Isaac Z. Forget CommonJS. It's dead. **We are server side JavaScript.**. GitHub. 25 March 2013.
- ^ Dierx, Peter. A Beginner's Guide to npm — the Node Package Manager. sitepoint. 30 March 2016 [22 July 2016].
- ^ Ampersand.js. Ampersand.js - Learn. ampersandjs.com. [22 July 2016].
- ^ 5.0 5.1 Ojamaa, Andres; Duuna, Karl. Assessing the Security of Node.js Platform. IEEE Xplore. 2012 [22 July 2016].
- ^ Kennedy, Hugh; DeVay, Paul. Understanding npm. Nsight. [22 July 2016]. (原始内容存档于2016年7月8日).
- ^ Yegulalp, Serdar. How one yanked JavaScript package wreaked havoc. InfoWorld. 23 March 2016 [22 July 2016].
- ^ Williams, Chris. How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript. The Register. [17 April 2016].
- ^ npm, Inc. npm. npm. [22 October 2016].
- ^ npm-stat: download statistics for NPM packages.
- ^ Ellingwood, Justin. How To Use npm to Manage Node.js Packages on a Linux Server. DigitalOcean. [22 October 2016].
- ^ npm-install. docs.npmjs. [22 October 2016].
- ^ semver. docs.npmjs. [22 October 2016].
- ^ npm-version. docs.npm. [29 October 2016].