目前,主流的包管理工具有:npm,yarn,pnpm,淘宝镜像:cnpm,tyarn等;前面所列的包管理工具均基于node.js
关于包管理工具
包管理工具的主要作用是管理第三方依赖;也可以看成一个"轮子"工厂,每个人都可以上传自己造的”轮子”和下载使用别人的"轮子"。
包管理工具顾名思义就是统一管理这些轮子的软件或者工具,它以多种方式自动处理项目依赖关系、提供了命令行工具(CLI)、支持跟踪依赖项和版本等功能。除此之外还可以安装、卸载、更新和升级包,配置项目设置,运行脚本等等。
在包管理工具问世之前,前端的依赖管理都是手动下载和管理的,这对于程序员而言是一个痛苦的过程。包管理工具的出现,将开发者从繁琐的包管理工作(版本、依赖等)中解放出来,更加专注于功能的开发。
有了包管理工具,我们可以很简单地构建一个项目或者引入和管理一个库,留给我们的则是愉快地编码。
npm
起源
npm 是 2010 年发布的 nodejs 依赖管理工具。
NPM 的全称是 Node Package Manager,是随同 NodeJS 一起安装的包管理和分发工具。npm是nodejs内置的包管理工具,在安装nodejs时就会一同安装npm。
优点:npm是一个成熟、稳定、并且有趣的包管理器。提供了一个非常有用的解决方案,支持大量的测试用例。
缺点:下载速度慢;安装速度慢;下载版本不一致;
注:npm5改进后与yarn相差不大
安装
npm 不需要单独安装。在安装 Node 的时候,会连带一起安装 npm 。但 Node 附带的 npm 可能不是最新版本,最后用下面的命令,更新到最新版本。
$ sudo npm install npm@latest -g # Linux 命令
npm install npm -g # Window 系统使用这个命令
也就是使用 npm 安装自己。之所以可以这样,是因为 npm 本身与 Node 的其他模块没有区别。
$ npm help # 查看 npm 命令列表
$ npm -l # 查看各个命令的简单用法
$ npm -v # 查看 npm 的版本,可用于检验安装是否成功
$ npm config list -l # 查看 npm 的配置
常用命令
npm version
查看npm 和 node的版本
npm list
查看全局安装的包
npm root [-g]
查看全局包的安装路径
若想安装依赖到指定目录,需要先设置目录:例如npm config set prefix "f:\node"
,然后再执行 npm install 包名
cnpm
起源:国内使用npm下载太慢了,所以淘宝提供了镜像cnpm访问。
优点:跟npm使用区别不大,npm是国外站点资源,cnpm是国内站点资源,当然国内站点的要快一点。
缺点:npm有packge-lock.json是用来锁定安装的包的版本号,但是cnpm不受packge-lock.json的限制,cnpm只根据packge.json来下载安装包。
安装
npm install -g cnpm --registry=https://registry.npm.taobao.org
#它的作用:全局安装cnpm,并且将安装各种包的地址切换到国内的淘宝镜像
cnpm -v #查看版本,可用于检验是否安装成功
#有时候这里会报错,需要在系统变量里添加一条路径,具体问题遇到再解决,反正我也不用cnpm,哥有更好的选择,哈哈。
yarn
起源:yarn 是 Facebook 于 2016 年 发布的替代 npm 的包管理工具,还可以作为项目管理工具,定位是快速、可靠、安全的依赖管理工具。其目的是用来替代npm。
缺点:
- 存在幽灵依赖;
- 提升的依赖仍旧会复制多份;
优点:
- 运行速度获得了显著的提高,整个安装时间也变得更少;
- 像npm同样,yarn使用本地缓存。与npm不一样的是,yarn无需互联网链接就能安装本地缓存的依赖项,它提供了离线模式。这个功能在2012年的npm项目中就被提出来过,但一直没有实现;
- 容许合并项目中使用到的全部的包的许可证;
注:pnpm解决了yarn存在的问题。
安装
#如果电脑上已经安装过nodejs,那么,就可以通过npm来安装yarn
npm install --global yarn
#查看版本,来检查是否安装成功
yarn --version
常用命令
#初始化一个新项目
yarn init
#添加依赖包
yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]
#将依赖项天际到不同的依赖项类别中,分别添加到 devDependencies、peerDependencies 和 optionalDependencies 类别中:
yarn add [package] --dev
yarn add [package] --peer
yarn add [package] --optional
#生级依赖包
yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]
#移除依赖包
yarn remove [package]
#安装项目的全部依赖
yarn
#或者
yarn install
pnpm
起源:是 2017 年发布的一款替代 npm 包管理工具,具有速度快、节省磁盘空间的特点。pnpm 含义为 performant npm,意指: 高性能的 npm
虽然yarn已经很优秀了,但是pnpm在性能上给出了更好的成绩,也利用硬链接和符号链接来避免复制所有本地缓存源文件(yarn最大的性能弱点)
缺点:对老旧存量项目迁移pnpm可能需要踩坑
优点:
- pnpm运行起来非常的快,超过了npm和yarn;
- pnpm采用了一种巧妙的方法,利用硬链接和符号链接来避免复制所有本地缓存源文件,这是yarn的最大的性能弱点之一;
- pnpm继承了yarn的所有优点,包括离线模式和确定性安装;
- pnpm 内置了对单个源码仓库中包含多个软件包的支持;
- pnpm 创建的 node_modules 并非扁平结构,因此代码不能对任意软件包进行访问;
安装
#通过npm安装
npm install -g pnpm
#升级
pnpm add -g pnpm
#卸载
pnpm rm -g pnpm
#查看版本
pnpm -v
pnpm --version
#创建package.json文件
pnpm init
pnpm init --yes
#安装项目所有依赖
pnpm install
#安装指定依赖
# 运行时依赖
pnpm add <package>
pnpm add <package> --save
# 开发时依赖
pnpm add <package> --save-dev
#移除依赖
# 移除当前项目包
pnpm remove <package>
# 移除全局的依赖包
pnpm remove <package> --global
#运行脚本
pnpm run <command>