pnpm 子模块复用及问题展示处理
此处需提前配置好 pnpm-wrokspace.yaml,如下是我的目录结构及pnpm-wrokscpace.yaml配置
packages:
- 'main'
- 'web/**'
- 'common'
- 'common2'
假如你的项目目录如此,子应用想引入公共模块,可以使用如下命令
//如果main项目想引入common模块
pnpm -F main add common
执行成功后你会发现main项目的package.json 下会有引入的模块
OK,没问题,引入成功
往往事情都没这么简单,就如我一样新增了commom2模块,但是此时我生成common2的方式和common的命令不一样,如下
// common 模块是通过我创建文件夹然后通过pnpm init的方式生成 package.json
mkdir common
pnpm init
// common2 模块是通过pnpm create vite 生成 我选了对应的模版
pnpm create vite
好了,问题来了
最上方的例子我们通过命令 pnpm -F main add common 成功复用子模块,但是当我使用 pnpm -F main add common1 的时候发现了不对劲,怎么是从npm下载的插件而不是本地子模块复用
这里会发下两个依赖对应值的区别,workspace 表明成功使用子模块,而commom2则对应的是版本号,这里说明commom2的复用是下载的依赖而非本地模块复用,但是这里我明明使用的是同样的命令,怎么一个成功了一个没成功呢
这里我查阅了大量文档后,有的文档里讲了要添加本地模块需要加上前缀 @project,以便pnpm区分本地还是线上,所以我又进行了尝试
纳尼,怎么404,证明使用@project是走不通了,我就回想common2和common有什么区别,经过对比后发现,package.json中两个的版本不同,common的version为1.0.0 commom2的version为0.1.0 经过修改common2的version后成功添加,这里发现如需要子模块复用,子模块的版本不能为0开头的版本
修改后mian项目成功复用comm2模块
game over