monorepo
顾名思义多项目管理,协调多个项目在同一个文件夹下的共存,以及依赖包的管理
比较著名的工具有lerna pnpm 等等
pnpm
包依赖的最优解,包之间依赖保持树状结构,不同于 npm 的扁平化管理,所以node_modules 看起来非常的清爽:

列表里展示的是直接依赖,依赖的依赖放置于 node_modules 下的隐藏文件夹 .pnpm 文件夹内
- 使用方式
在根目录下创建pnpm-workspace.yaml文件,配置需要pnpm接管的项目,大致内容可以如下
packages:
- "packages/*"
- "build/*"
- "storybook-doc"
安装时可以继续使用npm i 或者 pnpm i ,使用前者将继续保留扁平化的引用方式,使用后者将采用pnpm包的引用方式
-
推荐做法
正常方式创建项目,然后在每个项目文件夹执行项目该有的命令,如:npm runpnpm i等等,和常规使用方式保持一致(当然尽量用pnpm取代npm)即可。 -
优点
通过软连接充分利用的磁盘空间,且几乎不会有版本的冲突,安装非常的快 -
缺点
因为是非扁平化的,所以有些依赖可能会不找到,平时情况下依赖都是在同一个文件夹下面的,正常引用是没问题的,但是一旦将树状后,某个依赖可能是位于另外一个依赖的下面,会找不到,所以需要单独安装,让它直接在node_moduels下面。
另外基于硬连接,如果将项目换个目录位置,都可能无法跑通,也需要重新pnpm -
如何搬迁呢?
# 打包,会生成一个 tgz 文件
pnpm pack
# 安装
pnpm install
如何实现当开发和仿真的结合
开发我们一般希望是使用未压缩的代码,但是又必须验证仿真是否可行,可使用如下方案:
packages:
- "packages/*"
packages:
- "packages/**/dist"
分开使用,如果想验证就用下面的,开发的用上面的
本文介绍了pnpm在多项目管理中的应用,它通过树状结构管理包依赖,提供更清爽的node_modules。pnpm-workspace.yaml用于配置项目,推荐在每个项目目录下独立使用pnpm。虽然有空间利用和版本冲突减少的优点,但也存在非扁平化可能导致的依赖查找问题和硬链接对目录移动的敏感性。
1332





