网站搜索

javascript - 我如何在2023年“正确地”构建ES模块包的导出?


上下文

我目前正在将我的 MVP 代码拆分成更清晰的包,并希望在早期阶段建立坚实的结构基础。我使用纯 ES 模块 + 导入映射,并且已经成功(FTMP)进行了迁移,做了诸如使用 *.mts -> *.mjs、import 语句解析到带扩展名的实际文件等更改,但我不理解让使用者顺利上手的“正确”导出策略。

据我理解,有两种基本方法:

  1. 在整个文件夹结构中包含 index.mts 文件,例如 export * from ./some.file.i.have.to.remember.to.re-export.mjs。这样可以让使用者选择从裸包导入 import { Foo } from '@my-scope/my-lib',或者直接从具体路径的文件导入 import { Foo } from '@my-scope/my-lib/subfolder/non-index-file.mjs'。
  2. 不要整合再导出,只允许从单个文件导入。

问题

这是否是我唯一的两个选择?这些是“正确”的吗?是否有一个正在形成的标准,还是这更多是一个宗教性的问题?如果是这样,那么我提前道歉,但我正在寻找这些决策类型的基于动态的后果,例如,如果一种方式在未来破坏或复杂化导入映射会怎样。

目前

我目前正在尝试使用方法#1进行导出,结果参差不齐。有时我最终会使用裸导入来使用这些(我喜欢 FTMP),有时我会忘记包括一个 index.mts 的重新导出,结果最终从具体文件导入(因为我也是一个懒惰的使用者)。