PNPM 使用小记
和其他 JS 包管理工具相比,PNPM 以高效快速的依赖包安装作为最大亮点,使用软链接的方式进行文件管理环保而高效。
不过这并非最吸引我的点,毕竟在依赖变更并不频繁的情况下安装速度不是痛点。
在我的项目开发中,需要维护一系列粒度大小不一的功能库,数十个仓库分开存放,模块间常有依赖关系,维护起来非常心累。
monorepo
yarn、npm 同样支持 monorepo,通过 workspace 的方式,轻松适用于应用项目。
伴随应用项目的开发,常会衍生出一些基础库(如适用于该应用的 SDK),这些库需要发布到公开或私有的中心仓库中;yarn、npm 并不能优雅地支持该场景
pnpm - monorepo
pnpm 也通过 workspace 的方式支持 monorepo,与 yarn 不同的是 pnpm 更加严格,默认情况下它创建了一个非平铺的 node_modules,因此代码无法访问任意包
它需要使用方显式地在 dependencies 中做出类似 "foo": "workspace:*"
声明
pnpm - publish
在包进行 publish 之前,pnpm 会做两件事情
- pnpm 会将类似
"workspace:^1.0.0"
转换为"^1.0.0"
- 将 package.json 中 publishConfig 的定义覆盖到一级字段定义中,
main
、typings
的改写对 ts 模块来说非常实用
pnpm - 批处理
1 | # packages 下所有包执行 build 命令 |
1 | # 所有尚未发布到中心仓库的最新版本包执行 publish |