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

jfr*_*d00 3 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',
    './rateMap.js',
    './concurrency.js',
    './retry.js',
].reduce((obj, file) => {
    const m = require(file);
    Object.assign(obj, m);
    return obj;
}, {});
Run Code Online (Sandbox Code Playgroud)

这会重新导出模块目录中所有文件的所有导出,以便该模块的客户端只需导入一个文件并获取所有文件的所有入口点,而无需知道哪个入口点位于哪个文件中等等在。这对于 CommonJS 来说效果很好。

如何在 ESM 模块世界中完成类似的事情,而无需显式命名所有子文件中的每个导出?

Ber*_*rgi 5

您可以为每个人使用一颗星:export

export * from './mapConcurrent.js';
export * from './deferred.js';
export * from './utils.js';
export * from './rateMap.js';
export * from './concurrency.js';
export * from './retry.js';
Run Code Online (Sandbox Code Playgroud)

它将重新导出相应模块中的所有命名导出,但不会重新导出默认导出(您需要重命名,否则它们会发生冲突)。

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