npm介绍

npm 是 Node.js 官方提供的包管理工具,他已经成了 Node.js 包的标准发布平台,用于 Node.js 包的发布、传播、依赖控制。npm 提供了命令行工具,使你可以方便地下载、安装、升级、删除包,也可以让你作为开发者发布并维护包。

为什么要使用 NPM

npm 是随同 Node.js 一起安装的包管理工具,能解决 Node.js 代码部署上的很多问题,常见的场景有以下几种:

  • 允许用户从 npm 服务器下载别人编写的第三方包到本地使用。
  • 允许用户从 npm 服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到 npm 服务器供别人使用。

npm 的背后,是基于 couchdb 的一个数据库,详细记录了每个包的信息,包括作者、版本、依赖、授权信息等。它的一个很重要的作用就是:将开发者从繁琐的包管理工作(版本、依赖等)中解放出来,更加专注于功能的开发。

注册npm账号

发布npm包,需要先创建一个npm账号,创建账号地址,一般npm账号是一个用户名(不是邮箱)和密码。

注意:在注册的时候有可能会遇到注册失败或者503等问题,比如:Account creation denied. Please contact support@npmjs.com.遇到这种问题,不是网络问题,这时候联系官方人员,他会帮你处理,不过一般都可以。

创建npm包

新建一个项目

使用npm init或者在github上新建再下拉(建议在github上新建,会有repository、bugs、homepage这些信息,并最终显示在npm包信息里面)

入口文件

入口文件在package.json里面的"main": "index.js"定义。

自动更新包

设置了repository后,我们直接在github上更新项目就可以,npm包会自动更新。

登陆npm仓库

执行npm login命令,就会出现登陆界面如下,输入用户名、密码和邮箱地址后,如果登陆成功会出现提示Logged in as yourname on https://registry.npmjs.org/.

发布npm包

运行命令npm publish,会将当前的npm包发布到npm仓库上。发布成功后,登陆npm账号可以查看到刚刚发布的npm包的信息。

注意:刚注册的账号必须经过邮箱验证,没验证邮箱的账号是不能发布npm包的

更新npm包

npm包的package有repository

直接将更新代码发布到github上,代码会自动更新。

npm包的package没有repository

需要先将npm包下载到本地,进入npm所在文件夹,更新文件,运行npm login登陆npm账号,运行npm publish命令更新包。

yarn是什么鬼,与npm一样吗

“Yarn是由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具 ,正如官方文档中写的,Yarn 是为了弥补 npm 的一些缺陷而出现的。”

使用npm时的坑:

  • npm install的时候巨慢。特别是新的项目拉下来要等半天,删除node_modules,重新install的时候依旧如此。

  • 同一个项目,安装的时候无法保持一致性。由于package.json文件中版本号的特点,下面三个版本号在安装的时候代表不同的含义。"5.0.3","~5.0.3","^5.0.3",“5.0.3”表示安装指定的5.0.3版本,“~5.0.3”表示安装5.0.X中最新的版本,“^5.0.3”表示安装5.X.X中最新的版本。这就麻烦了,常常会出现同一个项目,有的同事是OK的,有的同事会由于安装的版本不一致出现bug。

  • 安装的时候,包会在同一时间下载和安装,中途某个时候,一个包抛出了一个错误,但是npm会继续下载和安装包。因为npm会把所有的日志输出到终端,有关错误包的错误信息就会在一大堆npm打印的警告中丢失掉,并且你甚至永远不会注意到实际发生的错误。

Yarn的优点:

  • 并行安装:无论 npm 还是 Yarn 在执行包的安装时,都会执行一系列任务。npm 是按照队列执行每个 package,也就是说必须要等到当前 package 安装完成之后,才能继续后面的安装。而 Yarn 是同步执行所有任务,提高了性能。

  • 离线模式:如果之前已经安装过一个软件包,用Yarn再次安装时之间从缓存中获取,就不用像npm那样再从网络下载了。

  • 安装版本统一:为了防止拉取到不同的版本,Yarn 有一个锁定文件(yarn.lock)记录了被确切安装上的模块的版本号。每次只要新增了一个模块,Yarn 就会创建或更新这个文件。这么做就保证了,每一次拉取同一个项目依赖时,使用的都是一样的模块版本。

参考:

[1] 如何发布一个NPM包呢

Author:tenado
CeateTime:2019-05-28
Link:https://www.kelede.win/posts/%E5%A6%82%E4%BD%95%E5%8F%91%E5%B8%83%E4%B8%80%E4%B8%AAnpm%E5%8C%85/
License:本站博文无特别声明均为原创,转载请保留原文链接及作者
Previous:HTTP1.0和HTTP2.0的区别 Next:没有了