monorepo项目出现版本冲突
问题描述
最新做了一个项目运用了monorepo来管理项目,主包运用的是vue3.0技术,子包里用的vuepress依赖了vue2.0, 此时运行子包的vuepress就会产生如下图的报错: 
问题原因
问题产生原因在于子包安装依赖的路径会提升,与主包依赖一起安装到根目录的node_modules里,然后vue-server-render@2.7.10的包,恰好和vue@3.2.39、vue@2.7.10在同一级,vue-server-render@2.7.10里的文件优先使用了vue@3.2.39的包,导致版本出现不一致的情况
解决方案
在根目录的package.json加入nohoist字段,它的作用是不提升vuepress依赖,这样相当于vuepress在子包的node_modules下安装依赖。 跟独立项目运行的效果是一样的
json
{
"private": true,
"workspaces": {
"packages": [
"packages/*"
],
"nohoist": [
"**/vuepress", // 任意目录下的依赖vuepress不提升
"**/vuepress/**" // vuepress的依赖也不提升
]
}
}