将import()转换为同步

时间:2018-06-27 18:09:42

标签: javascript node.js typescript

我正在尝试将所有节点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()

3 个答案:

答案 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');