假设webpack有内部缓存映射来存储已获取的模块,具有以下类型(我从未阅读过webpack源代码,所以这是基于我的假设)
Exports {
[key: string]: any
}
CacheMap: {
[modulePath: string]: Exports
}
问题是:如何使用此映射,并从代码中添加动态模块,因此我可以从代码的其他部分请求它。实施例
webpack.addToCache(moduleId, {
default: function defaultExport() {},
namedExport: function namedExport() {}
});
从捆绑的其他部分:
import MyDynamicModule, {namedExport} from 'moduleId';
答案 0 :(得分:1)
我们做类似的事情,但不是通过webpack。
我们通过'注册表'导入动态模块,该注册表传递到我们的应用程序,其中注册表只是一个JS地图,我们在地图中将值设置为我们想要的不同导入类型。
在您的情况下,您可以拥有一个包含对象数组的注册表,其中每个对象代表一个自定义类型。您可以通过字符串名称或id或其他来识别它们。像这样:
import foo, {bar} from 'FooBar';
const registry = {
Foo: {componentType: foo, componentName:'Foo'},
Bar: {componentType: bar, componentName:'Bar'}
}
export registry
所以现在在您的应用程序中,您可以导入注册表并引用这些类型作为registry.Foo和registry.Bar,您知道'registry.Foo.componentType'是真正的导入类型。