我试图根据路由名称动态调用一些组件。我的组件来自远程模块联合,因此我需要保留该结构: 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>
我收到此错误:未捕获(承诺)错误:找不到模块“测试/测试”
(虽然模块名称是正确的......)
这有效:
const name = computed(() => defineAsyncComponent(() => import("test/Test")));
看来我们不能在导入中使用动态名称。知道如何绕过这个问题吗?我想稍后也使用公开模块的动态列表,这就是我不想硬编码名称的原因。