Skip to content

monorepo项目出现版本冲突

问题描述

最新做了一个项目运用了monorepo来管理项目,主包运用的是vue3.0技术,子包里用的vuepress依赖了vue2.0, 此时运行子包的vuepress就会产生如下图的报错: 1

问题原因

问题产生原因在于子包安装依赖的路径会提升,与主包依赖一起安装到根目录的node_modules里,然后vue-server-render@2.7.10的包,恰好和vue@3.2.39vue@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的依赖也不提升
    ]
  }
}

苏ICP备20040768号