使用Typescript在Webpack编译期间动态导入模块

时间:2019-04-14 17:48:11

标签: javascript typescript webpack

我正在尝试为爱好项目创建一个框架,在该框架中我可以在自己的Typescript文件中分别拥有任意数量的对象定义。然后,我有了一个工厂,该工厂可在需要时根据这些定义创建实体。

例如,通过调用createEntity('Player'),工厂将使用名为Player的定义来创建新实体。

由于项目中可能有大量这些定义文件,因此我不想手动将它们全部导入到factory模块中。由于我使用的是Webpack,因此我认为应该可以找到与.entity.ts之类的glob匹配的所有文件,并将它们导入到工厂模块在编译期间。但是,我不太确定该怎么做。

我发现了一些有关context api的提及,这些提及似乎可以满足我的需要,但是从示例中我看不出如何在工厂模块中实际使用它。 TSC还抱怨说,当我在模块中放入以下行时,找不到名称require

function importAll(r) {
  r.keys().forEach(r);
}
importAll(require.context('.', true, /\.entity\.ts/));

那么,如何在不手动编写导入文件的情况下,将所有定义文件都包含到Webpack捆绑包中并将其导入到工厂模块中呢?

1 个答案:

答案 0 :(得分:0)

找到了解决方案。首先,我必须安装软件包@types/webpack-env@types/node作为开发依赖项。

然后在我的工厂模块中的以下代码选择并导入我的定义:

function importAll(r) {
  return r.keys().map(r);
}

const knownEntities = importAll(require.context('../..', true, /\.entity\.ts$/));