引言
在前端开发中,包管理工具是必不可少的工具之一。目前,市面上有多种包管理工具可供选择,如 npm、cnpm、yarn 和 pnpm 等。下面我们将详细讲解这四种包管理器,分析其不同之处以及简单讲解下npx和nvm。
npm(Node Package Manager)
-
npm 是 Node.js官方的包管理器,也是JavaScript生态系统中最受欢迎的包管理器之一
-
npm可以自动解析项目中的依赖项,并安装所需安装包
-
npm使用package-lock.json文件来确保安装过程中使用相同的依赖项版本
-
npm是单线程解析依赖项,因此安装速度可能相对较慢
-
npm使用package-lock.json文件锁定依赖版本,这可能导致包版本冲突和依赖冲突的困扰
cnpm(China NPM)
-
cnpm是阿里巴巴推出的包管理工具,是中国版的npm
-
cnpm安装之后默认使用registry.npmmirror.com这个淘宝镜像源
-
cnpm与npm基本相同,只是在国内,下载速度更快
yarn(Yet Another Resource Negotiator)
-
yarn是Facebook开发的包管理器,是为了弥补npm的缺陷出现的
-
yarn可以并行下载和缓存软件包,yarn是同步执行所有任务,其安装速度比npm较快
-
yarn支持离线模式,使用本地缓存,可以在无互联网连接就能安装本地缓存的依赖项
-
yarn还引入了yarn.lock锁定文件,用来确保团队成员在使用相同的包版本
-
yarn将所有软件包都缓存在本地,可能会占用大量的磁盘空间
pnpm(Performant NPM)
-
pnpm是Node.js的替代包管理器,有着快速且节省空间的特点
-
pnpm所有的依赖会被存储在内容可寻址的存储中,即存储在硬盘的同一位置,当我们需要安装的依赖在硬盘中已经存在,包里的文件会硬链接到这一位置而不是重新安装,这样多个项目可以共享同一依赖,也是因为pnpm将依赖项链接到一个共享的存储库开减少重复的下载,使得pnpm可以更快地安装 和更新模块
-
pnpm还允许在不同的项目之间共享相同的依赖项,从而节省磁盘空间
-
pnpm与yarn类似,也可以使用多线程解析依赖项,同样也支持离线模式
-
pnpm采用了不同的依赖性解析方法,可能存在一些兼容性问题
安装
| 包管理器 | 安装方式 |
|---|---|
| npm | 新版的Node.js已经集成了npm,安装Node.js的时候,npm也一并安装好了,Node.js下载传送门 |
| cnpm | npm install -g cnpm |
| pnpm | npm install -g pnpm |
| yarn | npm install -g yarn |
命令对比
| 命令 | npm | cnpm | pnpm | yarn |
|---|---|---|---|---|
| 安装依赖项 | npm install <package-name> | cnpm install <package-name> | pnpm install <package-name> | yarn add <package-name> |
| 全局安装 | npm install -g <package-name> | cnpm install -g <package-name> | pnpm install -g <package-name> | 不支持全局安装,yarn的bin目录路径不会添加到环境变量 |
| 更新依赖项 | npm update | cnpm update | pnpm update | yarn upgrade |
| 删除依赖项 | npm uninstall <package-name> | cnpm uninstall <package-name> | pnpm uninstall <package-name> | yarn remove <package-name> |
| 运行脚本 | npm run <script-name> | cnpm run <script-name> | pnpm run <script-name> | yarn run <script-name> |
扩展:npx nvm
npx
- npx是一个工具,是npm v5.2.0引入的一条命令(npx),旨在方便调用项目内部安装的模块
- 优点:临时安装可执行依赖包,不用全局安装,不用担心长期的污染
- 缺点:主动下载的文件,用完就会删除。下次还要再次下载,耗时耗资源
- 安装:npm install -g npx
nvm
- nvm是个版本管理工具,一个 nvm 可以管理很多 node 版本和 npm 版本,nvm可以让你在不同的nodejs版本之间来回切换
- Node.js 的版本迭代速度太快,一套系统中可能会部署不同的 Node.js 版本,各个版本之间没有办法直接兼容,需要开发人员不同的切换版本,nvm 就为了满足这个需求而存在的