問題が発生しました。以下はシナリオです。
4〜5つの画面/コンポーネント(ユーザーの管理、通知の管理、ロールの管理など)を持つvueアプリケーション(my-adminマイクロアプリ)を開発し、次のように書いたrouter.jsを作成しました:
...imports...
Vue.use(VueRouter);
// }
const routes = [
{
path: '/',
name: 'main-layout',
component: MainLayout,
children:[
{
path : 'manage-user',
name : 'manage-user',
component : ManageUserComponent
},
{
path : 'manage-role',
name : 'manage-role',
component : ManageRoleComponent
}
]
}
]
const router = new VueRouter({
routes
})
export default router
以下のように、このルーターオブジェクトをmain.jsにインポートしました。
...imports...
new Vue({
router,
render: h => h(App),
}).$mount('#app')
そして最後に、このマイクロアプリを main.js の Web コンポーネント (MainLayout コンポーネント)として以下のようにラップします。
const myAdmin = wrap(Vue,MainLayout)
window.customElements.define('my-admin', myAdmin)
次のコマンドでこのマイクロアプリをビルドします。
"build": "vue-cli-service build --target wc --name my-admin ./src/main.js",
このマイクロアプリは以上です。このマイクロアプリを個別に実行すると、完全に実行されます。
しかし、私のシナリオでは、Vueのみで開発されたシェル アプリケーション (my-shell) があります。このシェル アプリケーションには独自の vue ルーターもあり、以下のように main.js にインポートされます。
. シェル ルータ:
...imports...
Vue.use(VueRouter);
const routes = [
{
path: '/',
name: 'container',
component: Container,
children:[
{
path : 'admin',
name : 'admin-microapp',
component : AdminMicroAppContainerComponent
},
{
path : 'other',
name : 'other-microapp',
component : OtherMicroAppContainerComponent
}
]
}
]
const router = new VueRouter({
routes
})
export default router
そして、このルーターオブジェクトを以下のように my-shell の main.js にインポートしました:
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
そして、my-shell の index.html 内にタグ(内) を追加して、以下のようにマイクロ アプリのビルド (my-admin.js ファイル) をロードしました。
<script src="../assets/my-admin/dist/my-admin.js"></script>
<script src="../assets/other-microapps/dist/micro-app.js"></script>
しかし、私が my-shell application を開始しているとき。それは以下のエラーをスローしています:
Uncaught TypeError: Cannot redefine property: $router.
このエラーを取り除くにはどうすればよいですか?