[翻译]npm简介

npm(即node.js包管理)是一个js编程语言的包管理工具。它是js的运行环境nodejs默认的包管理工具,由命令行客户端1(我们一般说npm时也指的是这个命令行程序)、一个公共的在线数据库以及npm登记簿组成。登记簿中包含很多包,想要浏览和搜索这些包,可通过npm或npm网站。包管理工具和登记簿由npm公司管理。

历史

npm由完全由js写成,它的作者是Isaac Z. Schlueter。该作者觉得其他包管理工具很差劲,于是在参考了一些其他的类似项目如PEAR或CPAN后,自行开发出了npm。

由npm造成的几次大毁坏

2016年3月,一个被其他众多流行的js包依赖的,名为 left-pad的包,由于命名争议而未发行,这吸引了出版商的注意。尽管该包在3小时后重新发布了,但它仍然造成了大面积的破坏,直接导致npm改变了它关于未发行这块的政策,以此来阻止未来类似事件的发生。

2018年2月,在5.7.1版本中一个小问题被发现。这个版本中的问题是在linux系统上运行 sudo npm 会改变系统文件的所有者,永久地破坏操作系统。

2018年7月,npm在为流行的eslint-scope 包的一个维护者提供证明这事上妥协了,导致该包3.7.2版本的恶意泄露。恶意代码复制运行该包的机器的npm认证,并将这些信息上传给攻击者。

2018年11月,发现一个流行包 event-stream的3.36版本的依赖中被加入了一个恶意包。这个恶意包叫 flatmap-stream,它包含加密的有效负载,而这个有效负载会从特定的应用程序中偷取比特币。npm管理员通过移除该包作为对此次事件的回应。

描述

npm作为一个推荐特性,被包含在nodejs安装程序中。npm包括可以与远程的登记簿进行交互的命令行客户端。客户端允许用户对登记簿中的js模块进行使用和贡献。在登记簿中的包都是采用CommonJS形式的,而且它们的元数据文件采用的json格式。现在在登记簿上已超过477,000个包。登记簿对提交没有数据检测过程,这意味着提交内容(也就是包)可能是低质量、不安全及恶意的。对此,npm根据用户报告来下架一个包。如果用户报告某个包因为低质量、不安全或恶意等原因而违反了npm的政策,该包就会被npm下架。npm给开发者提供包的下载数和此包依赖的包数来让开发者去评判包的质量。

在npm6.0版本中,审查功能被引入来帮助开发者辨别和修复已安装包的易被侵入性和安全性。安全问题的信息来源是来自在nsp平台上的报告。自从npm收购nsp后,该平台已经和npm整合了。

使用

npm可以管理特定项目的本地依赖包以及全局安装js工具。当被用作本地项目的依赖管理时,npm可以以一条命令来创建包管理文件 package.json 。在该文件中,每个依赖可以用语义化版本体系指定有效版本的范围,允许开发者自动更新他们的包,同时避免不想要的改变。npm也提供version-bumping工具来允许开发者给他们自己开发的特定版本的包打上标签。npm也提供 package-lock.json 文件,在评估完 package.json 中的语义化版本控制后,该文件有项目使用的特定版本的入口。

价格

如果你计划将自己的包上传到npm,对公共包作者来说是免费的。免费的包允许你分享和使用在npm登记簿上的js源码。这里有另一个机会针对对一个简单的命名空间就已足够,服从不是主要问题的小团队组织。第三个选择是针对需要工业化安全的,习作和服从性特征的企业的。

替代选择

相比起npm,这里有大量的开源替代选择来安装模块化js,包括ied, pnpm, npm-install, npmd, and Yarn。它们与公共npm登记簿兼容,并且会默认使用它。但与npm自身的客户端比起,其他的客户端提供的更多是性能改善。

1:命令行客户端。拿mysql作为例子来理解。mysql的mysql.exe程序就是一个命令行客户端。它是一个客户端程序,但没有图形界面,只能输入命令行。

猜你喜欢

转载自www.cnblogs.com/paige/p/10417372.html