这两天遇到一个VUE项目问题,网上资料难找,自己 研究了一下
问题背景:
我们的项目A(vue版本2.6.8),合作插件项目B(vue版本2.6.11),B上传到公司registry库,在我们的项目A里面dependencies引入B组件;
B组件:
import Vue from 'vue' import 'xe-utils' import VXETable from 'vxe-table' import 'vxe-table/lib/index.css' Vue.use(VXETable)
B项目单独自己跑没有任何问题,
但是在A项目install之后后报错vxe-table未注册
问题分析:
查看vue版本: npm ls vue
得到如下结果
分析得到B项目的 import Vue from 'vue' 来自它本层node_modules 里的vue@2.6.11
而A项目中的import Vue from 'vue' 来自外层 node_modules 里的vue@2.6.8
也就是说他们两个分别在不同的Vue实例注册了组件。
A项目运行所使用的自然是vue@2.6.8,所以在A项目中自然认为vxe-table没有注册
解决办法:
办法一:将它们的vue改成相同的版本,注意:先npm uninstall vue 再将package.json 中加上 "vue":"2.6.8" npm install ,不要加^和~以保持版本绝对一致
办法二(推荐):修改B项目,不要用import Vue from 'vue', 而是在B组件install方法里面使用vue,这样总是使用父级的vue,不用担心版本问题