Javascript 如何制作汇总模块,为ESM模块重新导出子模块的所有导出?

Javascript 如何制作汇总模块,为ESM模块重新导出子模块的所有导出?,javascript,node.js,node-modules,es6-modules,Javascript,Node.js,Node Modules,Es6 Modules,如何从ESM模块中的多个文件重新导出导出,而不单独列出每个导出 我有一个CommonJS模块目录,其中包含许多我想转换为ESM导入/导出的文件。目前,我有一个index.js文件,其中包含以下内容: // this just re-exports everything that the sub-modules export module.exports = [ './mapConcurrent.js', './deferred.js', './utils.js',

如何从ESM模块中的多个文件重新导出导出,而不单独列出每个导出

我有一个CommonJS模块目录,其中包含许多我想转换为ESM导入/导出的文件。目前,我有一个
index.js
文件,其中包含以下内容:

// this just re-exports everything that the sub-modules export
module.exports = [
    './mapConcurrent.js',
    './deferred.js',
    './utils.js',
    './rateMap.js',
    './concurrency.js',
    './retry.js',
].reduce((obj, file) => {
    const m = require(file);
    Object.assign(obj, m);
    return obj;
}, {});
这将重新导出模块目录中所有文件的所有导出,以便此模块的客户端只需导入一个文件并获取所有文件的所有入口点,而无需知道哪个入口点位于哪个文件中,依此类推。这对CommonJS很有效

您如何在ESM模块世界中完成类似的工作,而不必显式命名所有子文件中的每个导出?

您可以为每个子文件使用:

export * from './mapConcurrent.js';
export * from './deferred.js';
export * from './utils.js';
export * from './rateMap.js';
export * from './concurrency.js';
export * from './retry.js';
它将从相应模块重新导出所有命名导出,但不会导出默认导出(这些导出或它们将发生冲突)


因此,不必为每个导出显式命名,但必须显式声明所有子文件。

我认为ESM不可能做到这一点,除非等待动态导入。它与CJS配合使用,因为require只是另一个函数,但
import
不是一个函数,而是一个顶级语句。另请参见或?