我想将我的 TS 项目编译为 ESM 和 CJS。我已经设置了两个 tsconfig 文件来执行此操作等等。
其中一个文件尝试有条件地导入包,这在每个环境中都必须以不同的方式完成。这意味着我必须有该文件的两个不同版本。但我希望其余的代码是相同的。
有没有一种方法可以确保ESM版本导入文件时,它会收到一个版本,而CJS版本会收到另一个版本?
我想尽可能减少使用捆绑器以及构建后工具和流程。
有没有一种方法可以确保当ESM版本导入文件时,它将收到一个版本,而CJS版本将收到另一个版本?
node-module-type
包根据库中的文件是在 ESM 还是 CJS 上下文下运行来在库中应用条件逻辑。
例如,在您的库的某些文件中,可能会发布为 ESM 和 CJS
您的lib.js中的某个文件
import { moduleType } from 'node-module-type'
let moduleType = 'unknown'
// Since you are dual building can't really use top-level await
(async () => {
moduleType = await moduleType()
})()
if (moduleType === 'module') {
// Your library is running in ES module scope
}
if (moduleType === 'commonjs') {
// Your library is running in CommonJS module scope
}