如何在运行时将模块添加到webpack

时间:2017-08-09 12:04:11

标签: webpack webpack-2

假设webpack有内部缓存映射来存储已获取的模块,具有以下类型(我从未阅读过webpack源代码,所以这是基于我的假设)

Exports {
  [key: string]: any
}

CacheMap: {
  [modulePath: string]: Exports
}

问题是:如何使用此映射,并从代码中添加动态模块,因此我可以从代码的其他部分请求它。实施例

webpack.addToCache(moduleId, {
  default: function defaultExport() {},
  namedExport: function namedExport() {}
});

从捆绑的其他部分:

import MyDynamicModule, {namedExport} from 'moduleId';

1 个答案:

答案 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'是真正的导入类型。