主流包管理工具npm、cnpm、yarn的使用
在 node
未出世之前,比如 jquery
时代,我们做项目的时候想引用第三方插件怎么做,一般都是把插件下载后用 script
标签引用对吧。
<script src="插件包"></script>
如果引用的插件很多也是件很头疼的事情。最头疼的可能就是这位名叫 Isaac Z. Schlueter
(npm创始人)的程序员了,他实在受不了于是提出一个方案:“用一个工具把这些代码集中到一起来管理吧!”
于是 npm
问世了,全称是 Node Package Manager
。现在新版本的 Node
都集成了 npm
,直接使用就可以了。
好了,废话不多说开始正题吧!
NPM
npm
(node package manager)是 JavaScript
世界的包管理工具,是 Node.js
平台的默认包管理工具,是前端模块化下的一个标志性产物,简单地说,就是通过npm下载模块,复用已有的代码,提高工作效率。
下面是关于 npm
的快速介绍:
-
npm 由三个独立的部分组成:
-
- 网站
- 注册表(registry)
- 命令行工具 (CLI)
网站 是开发者查找包(package
)、设置参数以及管理 npm
使用体验的主要途径。
注册表 是一个巨大的数据库,保存了每个包(package
)的信息。
CLI
通过命令行或终端运行。开发者通过 CLI
与 npm
打交道。
npm常用命令
- 查看
npm
的版本
npm -v #npm -version
- 查看
npm
帮助
# 查看所有的命令帮助
npm help
# 如果要单独查看install命令的帮助,可以使用下面的命令
npm help install
- 查看安装过的所有包
npm list #列出当前安装过的所有包
#或者简写
npm ls
npm ls -g #查看全局安装的模块及依赖
- 本地安装依赖包和全局安装(global)
#安装nodejs的依赖包,默认安装最新版本(本地)
npm install <Package name>
#一次性安装多个(本地)
npm install 模块名 模块名
#安装指定版本号的依赖包(本地)
npm install <Package name>@version
#将包安装到全局环境中
npm install <Package name> -g
# 根据package.json文件安装
npm install
- 卸载依赖包
npm uninstall <Package name>
npm uninstall gulp --save-dev #卸载开发版本的模块
- 安装生产阶段的依赖包
-S
,--save
安装包信息将加入到dependencies
(生产阶段的依赖)
npm install gulp --save 或 npm install gulp -S
package.json文件的 dependencies 字段:
"dependencies": {
"gulp": "^4.0.2"
}
- 安装开发阶段的依赖包
-D
,--save-dev
安装包信息将加入到devDependencies
(开发阶段的依赖),所以开发阶段一般使用它
npm install gulp --save-dev 或 npm install gulp -D
package.json 文件的devDependencies字段:
"devDependencies": {
"gulp": "^4.0.2"
}
- 安装可选阶段的依赖包
-O
,--save-optional
安装包信息将加入到optionalDependencies
(可选阶段的依赖)
npm install gulp --save-optional 或 npm install gulp -O
package.json文件的optionalDependencies字段:
"optionalDependencies": {
"gulp": "^4.0.2"
}
- 精确安装指定版本依赖包
-E
,--save-exact
精确安装指定模块版本
npm install gulp --save-exact 或 npm install gulp -E
输入命令npm install gulp -ES,留意package.json 文件的 dependencies字段,以看出版本号中的^**消失了。
"dependencies": {
"gulp": "4.0.2"
}
模块的依赖都被写入了 package.json
文件后,他人打开项目的根目录(项目开源、内部团队合作),使用 npm install
命令可以根据 dependencies
配置安装所有的依赖包。
npm install
注意:
npm
的package.json
中的~和^- 会匹配最近的小版本依赖包,比如 ``~1.2.3
会匹配所有
1.2.x版本,但是不包括
1.3.0`
^ 会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
- 更新依赖包
npm update <Package name>
- 检查哪些依赖包是否过时
npm outdated
执行上面的命令,会出现如下情况:
另外有个检查依赖包更强大的一个第三方工具 npm-check
,具体使用方法,请查看它的文档。
- 查看和管理
npm
的基础配置
npm config list -l #查看所有的配置
- 清除本地
npm cache
缓存
npm cache clean
- 初始化项目
npm init #初始化项目,并在项目文件夹中引导创建一个package.json文件
cnpm是什么?
简单的讲就是中国版的 NPM
,因为 npm
安装插件是从国外服务器下载,受网络影响大,可能出现异常,所以我们乐于分享的淘宝团队干了这事。
“
这是一个完整
npmjs.org
镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。—来自淘宝NPM
镜像”
如何使用cnpm?
首先就是需要安装 cnpm
模块,命令如下:
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm
支持可以使用支持 npm
除 publish
之外的所有命令。
因为 cnpm
的仓库只是 npm
仓库的一个拷贝,它不承担 publish
工作,所以执行cnpm publish
命令会失败的。
yarn是什么?
Yarn
发布于2016年10月,截至当前2021年1月,在 Github
上拥有了39.4k个 Star
。而 npm
只有17.2k个 Start
。这个项目由一些高级开发人员维护,包括了 Sebastian McKenzie(Babel.js)
和 Yehuda Katz
(Ember.js
、Rust
、Bundler
等)。
Yarn
一开始的主要目标是解决上一节中描述的由于语义版本控制而导致的 npm
安装的不确定性问题。虽然可以使用 npm shrinkwrap
来实现可预测的依赖关系树,但它并不是默认选项,而是取决于所有的开发人员知道并且启用这个选项。
Yarn
采取了不同的做法。每个 yarn
安装都会生成一个类似于 npm-shrinkwrap.json
的 yarn.lock
文件,而且它是默认创建的。除了常规信息之外,yarn.lock
文件还包含要安装的内容的校验和,以确保使用的库的版本相同。
yarn
是经过重新设计的崭新的 npm
客户端,它能让开发人员并行处理所有必须的操作,并添加了一些其他改进。
运行速度得到了显著的提升,整个安装时间也变得更少 像 npm
一样,yarn
使用本地缓存。与 npm
不同的是,yarn
无需互联网连接就能安装本地缓存的依赖项,它提供了离线模式。这个功能在2012年的 npm
项目中就被提出来过,但一直没有实现。允许合并项目中使用到的所有的包的许可证
安装通过命令安装
npm install -g yarn
查看版本:yarn --version
通过安装包程序安装 地址:https://classic.yarnpkg.com/zh-Hans/docs/install#windows-stable
常用命令:
yarn init
:初始化项目,会在根目录下生成一个package.json,与npm类似具体不做解释yarn add <Package name>
:安装依赖包,会自动安装最新版本,会覆盖指定版本号yarn add <Package name1> <Package name1>
:一次性添加多个包yarn add <Package name>@version
:添加指定版本的包yarn upgrade <Package name>@version
:将包更新到指定版本yarn upgrade --latest <Package name>
:将包更新到最新版本yarn remove <Package name>
:删除包yarn remove <Package name1> <Package name2>
:一次性删除多个包yarn info <Packagename>
:可以用来查看某个模块的最新版本信息yarn install
:安装package.json
里所有包,并将包及它的所有依赖项保存进yarn.lock
yarn install --force
:强制重新下载所有包yarn install --flat
:安装一个包的单一版本yarn install --production
:只安装dependencies
里的包yarn install --no-lockfile
:不读取或生成yarn.lock
yarn install --pure-lockfile
:不生成yarn.lock
具体详细的命令可以查看官方文档:https://classic.yarnpkg.com/zh-Hans/docs
总结
说了这么多,一句话总结就是:npm
是国外版、cnpm
是国内版、yarn
是 npm
的加强版。
摘自与前端沾边