首页 > 解决方案 > 使用 es6 导入并执行文件夹中的所有文件

问题描述

我正在将一些节点 ES5 节点代码迁移到 Typescript。我需要移植这两段代码,在其中迭代目录中的所有文件并调用这些文件正在导出的默认函数。我将如何在 Typescript 或 ES6 中做到这一点?

模型/index.js

const fs = require("fs");

module.exports = () =>
  fs.readdirSync(__dirname).map((model) => {
    if (model === "index.js") return;
    return require("./" + model);
  });

index.js

const modelDefiners = require("./models")();

for (const modelDefiner of modelDefiners) {
  if (typeof modelDefiner === "function") {
    modelDefiner();
  }
}

标签: javascripttypescriptecmascript-6

解决方案


您可以使用动态导入来做到这一点:

import { promises as fs } from 'fs';
import { join } from 'path';

export default async function*() {
  for (const model of await fs.readdir(__dirname)) {
    if (model === "index.js") continue;
    yield await import(join(__dirname, model));
  }
}
import modelDefiners from "./models";

(async () => {
  for await (const {default: modelDefiner} of modelDefiners()) {
    if (typeof modelDefiner === "function") {
      modelDefiner();
    }
  }
})();

推荐阅读