javascript - 使用 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();
}
}
解决方案
您可以使用动态导入来做到这一点:
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();
}
}
})();
推荐阅读
- reactjs - 使用 Tooltip.js 渲染 React 组件
- kotlin - Android Room 获取具有非空嵌入属性的相关实体
- c# - 数据未显示在网格中
- java - 使用 Java 替换 word doc 中的数据
- php - 使用 .htaccess 将任何子域重写到目录
- java - Java Stream:从仅保留匹配值的 2 个列表创建新列表
- javascript - 笑话:等待异步测试完成后再运行下一个测试
- c# - C# - 如何将私钥与证书合并
- mysql - MySql 删除 find_in_set 不工作的地方
- laravel - 我们如何在 browserkit 中使用 laravel 黄昏?