ルート名に応じて、いくつかのコンポーネントを動的に呼び出そうとしています。私のコンポーネントはリモートモジュールフェデレーションから来ているので、それを定義する他の方法がない限り、その構造を維持する必要があります: import('module/Module') 。
ここに私のwebpack設定があります
new ModuleFederationPlugin({
name: "core-front",
remotes: {
test: "test@http://localhost:8081/remoteEntry.js",
test2: "test2@http://localhost:8082/remoteEntry.js",
},
exposes: {},
shared: require("./package.json").dependencies,
}),
したがって、ルートが localhost:8080/app/test の場合、test または test2 をロードしたいと思います
名前を動的に書き換えて import() 内で使用しようとしましたが、機能しません。
<template>
<component :is="name"></component>
</template>
<script setup>
import {computed, defineAsyncComponent} from "vue";
import {useRoute} from "vue-router";
const route = useRoute();
const capitalizer = (string) => {
return (string && string[0].toUpperCase() + string.slice(1)) || "";
};
const name = computed(() => {
const appName = route.params.name;
const appNameCapitalize = capitalizer(appName);
return defineAsyncComponent(() => import(`${appName}/${appNameCapitalize}`));
});
</script>
次のエラーが表示されます: Uncaught (in promise) エラー: モジュール 'test/Test' が見つかりません
(モジュール名は正しいですが...)
これは機能します:
const name = computed(() => defineAsyncComponent(() => import("test/Test")));
インポートでは動的な名前を使用できないようです。この問題を回避する方法はありますか? 後で公開モジュールの動的リストも使用したいので、名前をハードコーディングしたくありません。