我正在尝试将所有节点require()
转换为import()
语句,但是,这些语句是异步的,并且遇到了一些麻烦。
现在我有:
import * as fs from 'fs';
const paths = fs.readdirSync('./src/modules').map(path => './modules/' + path.slice(0, path.length - 3));
const classes = [];
paths.forEach(path => {
let bClass = require(path);
try {
classes.push(new bClass.default());
}
catch (err) {
//Here for if no default import
}
});
并想将require(path)
部分转换为import()
,但仍要保持同步,这可能吗?如果是这样,我将如何解决?
编辑:更多上下文。我有一个我们要导入的模块列表,我们以这种方式进行操作,因此,如果某个模块出现问题,我们可以将其注释/删除,而不必重新编码其他所有模块。我只需要动态同步导入,而无需使用require()
。
答案 0 :(得分:3)
目前,commonJS无法做到这一点。直到有一些同步的import()或顶级等待,才能完成。
答案 1 :(得分:1)
通过使用此babel插件https://www.npmjs.com/package/babel-plugin-dynamic-import-node-sync
,您仍然可以使用require()函数答案 2 :(得分:1)
当前版本的Node.js支持在标记--harmony-top-level-await
(节点> = 13.2)或--experimental-top-level-await
(节点> = 14.3)后面进行顶级等待。当使用两个标志之一启动Node时,将导入
import fs from 'fs';
可以在CommonJS中重写为
const fs = await import('fs');