《四》其他的包管理工具 yarn、cnpm、pnpm

yarn:

yarn:是由 Facebook、Google、Exponent 和 Tilde 联合推出的一个 JS 包管理工具。

早期的 npm 存在很多缺陷,例如:没有缓存的概念,不支持从缓存中获取已经安装过的依赖包,每次都需要从 registry 远程仓库中下载(直到 npm5 才开始支持);版本依赖混乱,如果不同的包依赖于同一个包的不同版本,那么当这两个包被加载时,可能会出现版本冲突的问题。yarn 的出现就是为了弥补早期 npm 的一些缺陷。

安装:

通过 npm 安装。运行 npm install yarn -g,yarn 会被全局安装,并且默认加入到环境变量中,就可以在任意命令行工具中使用了。

常用命令:

  1. yarn init:创建 package.json 配置文件。
  2. yarn add 或者yarn add --dev:安装包,支持以空格隔开同时安装多个包。
  3. yarn remove :删除包。
  4. yarn:根据 package.json 安装所有包。
  5. yarn run :运行某个脚本命令。

cnpm:

cnpm:是个中国版的 npm,是淘宝定制的用来代替 npm 的包管理工具,用法与 npm 完全一致。

由于墙的原因,国外的 registry 远程仓库有时可能会无法访问到,导致无法使用 npm 下载包。因此,淘宝搭建了一个镜像服务器仓库,每隔 10 分钟会将 registry 仓库中的包备份一份到镜像服务器仓库,国内的开发人员就可以从镜像服务器仓库下载包。但是,镜像服务器仓库中的包可能不是最新的,而且镜像服务器某一天也可能会挂掉或者不再维护。

安装:

运行 npm install -g cnpm --registry=https://registry.npm.taobao.org,安装 cnpm 并将远程仓库地址改为淘宝的镜像服务器仓库地址。

pnpm:

pnpm:由 npm/yarn 衍生而来,pnpm 的优势解决了 npm/yarn 内部潜在的问题,提高了性能。

优势:

安装速度快,节省磁盘空间:

操作系统中的硬链接和软链接:

操作系统本质上也是程序,其中的文件系统是对真实存储在电脑磁盘上的文件做了一层抽象。
对一个文件进行拷贝,新文件其实是在磁盘中生成的一份新数据。
对一个文件进行硬链接,新文件和源文件都指向磁盘中的同一份数据。
对一个文件进行软链接,新文件其实只是保存着指向源文件的路径。

  1. 拷贝:对文件进行拷贝会在磁盘中复制出来一份新的文件数据。修改、删除拷贝后的新文件对源文件不会有任何影响。
    《四》其他的包管理工具 yarn、cnpm、pnpm_第1张图片
  2. 硬链接:当点击某个文件时,会通过一种寻址方式,找到磁盘上真实存储的数据,这种链接就是硬链接。
    对文件进行硬链接,会生成一个新文件,它们指向的是磁盘中的同一个数据。当用户修改了其中的一个文件,另一个文件的内容也会发生改变;当用户删除了其中一个文件,另一个文件还是可以继续访问。

硬链接只能操作文件,不能操作目录。

《四》其他的包管理工具 yarn、cnpm、pnpm_第2张图片
3. 软链接(符号链接):如果给文件创建一个桌面快捷方式的话,这种链接就是软链接。软链接的大小是其链接文件的路径中的字符数。
对文件进行软链接,会生成一个新文件,点击新生成的文件,本质上其实是在打开源文件。如果删除了源文件,那么访问快捷方式也就没有什么用了。

新文件上会有一个小箭头的标识来表明是快捷方式。

《四》其他的包管理工具 yarn、cnpm、pnpm_第3张图片

如果电脑中有 10 个项目,并且这 10 个项目都依赖一个相同版本的包,npm 和 yarn 会在这 10 个项目中各自安装一份,那么在磁盘上就保存了 10 份相同版本的依赖包。相当于是文件的拷贝。

如果使用 pnpm,依赖包将被存放在一个统一的位置,pnpm 的 store 存储本质上都是磁盘中文件的硬链接。如果不同项目依赖同一个包的相同版本,那么将不会再次去远程仓库下载,会直接利用 store 存储中的文件为其建立一个硬链接,磁盘上将只有一份这个依赖包;如果依赖的是不同的版本,那么其他版本将只有版本之间不同的文件会被保存起来。

可以通过运行 pnpm store path 命令获取到当前活跃的 pnpm store 目录。
可以通过运行 pnpm store prune 命令来从 store 中删除当前未被引用的包来释放 store 的空间。

《四》其他的包管理工具 yarn、cnpm、pnpm_第4张图片

创建非扁平的 node_modules 目录:

默认创建了一个非平铺的 node_modules,因此代码只能访问 package.json 中记录的开发者安装的包,而无法访问非开发者安装的包,也就是包的依赖包。
《四》其他的包管理工具 yarn、cnpm、pnpm_第5张图片

使用 npm 或者 yarn 安装依赖包时,所有的包都会被提升到 node_modules 的根目录下。导致的问题就是,代码中可以访问依赖包的依赖包,它们本不属于当前项目所设定的依赖包,如果某天依赖包被删除,那么代码中访问依赖包的依赖包将会报错。例如:使用 npm 安装 axios,axios 的依赖包也被安装到了 node_modules目录下。

《四》其他的包管理工具 yarn、cnpm、pnpm_第6张图片

使用 pnpm 安装 axios,axios 的依赖包并没有被安装到 node_modules 目录下。

《四》其他的包管理工具 yarn、cnpm、pnpm_第7张图片

node_modules 目录下有个 .pnpm 目录,包含了所有的依赖包。依赖包下都有个 node_modules目录,包含其自身和其依赖

  1. node_modules 目录下的 axios 其实只是个软链接,指向 node_modules/.pnpm 下的 axios。
  2. node_modules/.pnpm/axios/node_modules 包含 axios 及其依赖包。此处的 axios 是硬链接,指向磁盘中的文件;依赖包只是软链接,指向 node_modules/.pnpm 下对应的的包。《四》其他的包管理工具 yarn、cnpm、pnpm_第8张图片

安装:

通过 npm 安装。运行 npm install pnpm -g,pnpm 会被全局安装,并且默认加入到环境变量中,就可以在任意命令行工具中使用了。

常用命令:

  1. pnpm init:创建 package.json 配置文件。
  2. pnpm add :安装包。
  3. pnpm remove :删除包。
  4. pnpm install:根据 package.json 安装所有包。
  5. pnpm :运行某个脚本命令。

你可能感兴趣的:(Node,Node)