解决依赖组件版本冲突

版本冲突相信大家经常遇到,如果有一天你发现升级了一个组件导致页面挂了,报出来的异常明显是某个组件中的,比如redux,那么可以大胆猜想可能是依赖的该组件版本冲突导致的。

关于版本冲突

比如项目中依赖A、B两个组件,A依赖C@^1.0.1版本,B依赖C@^3.0.1版本,那么打包时候如果没有明确指定C的版本,打包时候看项目中安装的是哪个版本,最后打包出来的C就是哪个版本,如果B中用了一个高级的API,低版本中不存在,那么页面解析代码时候就会挂了。

解决方法

一般有两种解决办法,一种是通过软件包别名,指定依赖的子软件包的各自版本。另一种是通过锁版本来处理,就是软件包统一版本,需要修改A、B组件,依赖同一个C版本。

软件包别名

这种方法是通过别名安装两个软件包,然后在构建代码中分别指定各自代码库的软件包。

npm v6.9.0开始, npm现在支持软件包别名。它实现了与Yarn相同的语法

    npm install jquery2@npm:jquery@2
    npm install jquery3@npm:jquery@3

这会将以下内容添加到package.json

    "dependencies": {
       "jquery2": "npm:jquery@^2.2.4",
       "jquery3": "npm:jquery@^3.4.1"
    }

也可以使用这种语法直接从GitHub安装。例如,如果您要安装软件包的npm注册表版本和GitHub分支foobar

    npm install foobar
    npm install foobar-fork@github:username/foobar

然后在webpack配置中写:

module.rules: [
    {
        include: path.resolve(__dirname, "node_modules/A-component"),
        resolve:{
            alias: { "juery": "jquery2" }
        }
    },{
        include: path.resolve(__dirname, "node_modules/B-component"),
        resolve:{ alias: { "juery": "jquery3" }}
    } 
]

锁版本

锁版本就比较简单了,在项目package.json中写明依赖组件C的版本。然后在webpack配置中指定统一的alias即可:

alias:{ "juery": "jquery3" }


请遵守《互联网环境法规》文明发言,欢迎讨论问题
扫码反馈

扫一扫,反馈当前页面

咨询反馈
扫码关注
返回顶部