随着项目的增多,依赖项与项目的数量成正比。使用pnpm在磁盘上节省大量空间,且安装速度要快得多…

背景

当使用 npm 或 Yarn 时,如果你有 100 个项目使用了某个依赖(dependency),就会有 100 份该依赖的副本保存在硬盘上。 而在使用 pnpm 时,依赖会被存储在内容可寻址的存储中,所以:

  1. 如果你用到了某依赖项的不同版本,只会将不同版本间有差异的文件添加到仓库。 例如,如果某个包有100个文件,而它的新版本只改变了其中1个文件。那么 pnpm update 时只会向存储中心额外添加1个新文件,而不会因为仅仅一个文件的改变复制整新版本包的内容。
  2. 所有文件都会存储在硬盘上的某一位置。 当软件包被被安装时,包里的文件会硬链接到这一位置,而不会占用额外的磁盘空间。 这允许你跨项目地共享同一版本的依赖。

因此,您在磁盘上节省了大量空间,这与项目和依赖项的数量成正比,并且安装速度要快得多!


一、pnpm管理npm

# 安装
$ npm install -g pnpm # 方式1:通过 npm 安装 (推荐)
$ brew install pnpm # 方式2:通过 Homebrew(包管理器) 安装

pnpm store prune # 清除缓存

二、yarn管理npm

待补充…


三、常见问题:构建和运行

1、node 二进制文件链接错误

问题表现:

$ pnpm run build
/xxx/framework/zmi/packages/presets-h5/node_modules/.bin/node: line 13: /xxx/framework/zmi/packages/presets-h5/node_modules/.bin/../../../../node_modules/.pnpm/node@16.14.2/node_modules/node/bin/node: No such file or directory

原因分析
pnpmnode_modules/.bin 目录中创建了一个指向不存在的 node@16.14.2 包的符号链接。这是一个常见的 pnpm 问题,它错误地尝试使用一个 node 包作为执行环境,而不是使用系统安装的 Node.js

解决方案:
删除错误的符号链接,让系统使用全局安装的 Node.js

$ pnpm store prune # 清除缓存
$ pnpm install --force # 重新安装依赖

# 确保没有错误的符号链接
$ find . -name "node" -type l -o -name "node" -type f | grep -v "^./node_modules/.*node/bin/node$" | xargs rm -f
$ pnpm run build # 重新构建

参考


最后, 希望大家早日实现:成为编程高手的伟大梦想!
欢迎交流~

微信公众号

本文版权归原作者曜灵所有!未经允许,严禁转载!对非法转载者, 原作者保留采用法律手段追究的权利!
若需转载,请联系微信公众号:连先生有猫病,可获取作者联系方式!