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 run
pnpm i
等等,和常规使用方式保持一致(当然尽量用pnpm取代npm)即可。 -
优点
通过软连接充分利用的磁盘空间,且几乎不会有版本的冲突,安装非常的快 -
缺点
因为是非扁平化的,所以有些依赖可能会不找到,平时情况下依赖都是在同一个文件夹下面的,正常引用是没问题的,但是一旦将树状后,某个依赖可能是位于另外一个依赖的下面,会找不到,所以需要单独安装,让它直接在node_moduels
下面。
另外基于硬连接,如果将项目换个目录位置,都可能无法跑通,也需要重新pnpm