這兩天遇到一個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,不用擔心版本問題