pnpm 安装、更新与版本查看
从 npm 换到 pnpm 的主要动因是磨掉两个痛点:node_modules 体积和安装速度。npm 和 yarn 的做法是把依赖平铺复制到每个项目的 node_modules 里,同一个包在十个项目里就有十份拷贝。pnpm 改成全局内容寻址存储加硬链接:包只在磁盘上存一份,项目里的 node_modules 通过硬链接指过去,装第二个项目时基本不用重新下载和写盘。
另一个区别是依赖隔离。npm 的平铺结构会让你能 require 到没有写进 package.json 的包(幽灵依赖),本地跑得好好的,换个环境就报模块找不到。pnpm 用符号链接构造出严格的嵌套结构,只有声明过的依赖才能被引用,这类问题在安装阶段就暴露出来。
安装
最直接的方式是用 npm 全局装一份(下面这条命令里的 instanll 是我当时的笔误,正确拼写是 install):
npm instanll pnpm -g
除此之外还有几种途径。官方推荐用独立脚本安装,好处是不依赖 Node,装完的 pnpm 自己能管理 Node 版本:macOS 和 Linux 执行 curl -fsSL https://get.pnpm.io/install.sh | sh -。macOS 上也可以 brew install pnpm。
如果项目要求团队用统一版本,更好的办法是走 Corepack。Node 16.9 以后自带 corepack,在 package.json 里写上 "packageManager": "pnpm@8.15.0",然后 corepack enable,之后在这个项目里执行 pnpm 会自动切到指定版本。这样就不会出现有人用 7.x 有人用 8.x,生成的 lockfile 版本不兼容互相冲突的情况。
更新
全局安装的话用 npm 更新:
npm update pnpm -g
用独立脚本装的可以执行 pnpm self-update(较新版本支持),或者重新跑一遍安装脚本。走 Corepack 的项目改 packageManager 字段里的版本号就行。
查看当前版本
pnpm -v
装完先确认这条命令能正常输出版本号,说明可执行文件已经在 PATH 里。如果提示 command not found,检查一下 npm 的全局 bin 目录有没有加进 PATH,npm bin -g 能打印出这个路径。
顺带一提,pnpm 大版本之间的 lockfile 格式会变(比如 lockfileVersion 从 5.4 到 6.0),升级后第一次安装可能会重写整个 pnpm-lock.yaml。这个改动最好单独提一个 commit,不要和业务代码混在一起,否则 code review 时几千行的 diff 没人看得下去。

还没有留言,来发表第一条吧~