随着项目的增多,依赖项与项目的数量成正比。使用pnpm
在磁盘上节省大量空间,且安装速度要快得多…
背景
当使用 npm 或 Yarn 时,如果你有 100 个项目使用了某个依赖(dependency),就会有 100 份该依赖的副本保存在硬盘上。 而在使用 pnpm 时,依赖会被存储在内容可寻址的存储中,所以:
- 如果你用到了某依赖项的不同版本,只会将不同版本间有差异的文件添加到仓库。 例如,如果某个包有100个文件,而它的新版本只改变了其中1个文件。那么 pnpm update 时只会向存储中心额外添加1个新文件,而不会因为仅仅一个文件的改变复制整新版本包的内容。
- 所有文件都会存储在硬盘上的某一位置。 当软件包被被安装时,包里的文件会硬链接到这一位置,而不会占用额外的磁盘空间。 这允许你跨项目地共享同一版本的依赖。
因此,您在磁盘上节省了大量空间,这与项目和依赖项的数量成正比,并且安装速度要快得多!
一、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
原因分析:pnpm
在 node_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 # 重新构建
参考
最后, 希望大家早日实现:成为编程高手的伟大梦想!
欢迎交流~

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