如何将项目编译为ESM + CJS并有一个不同的文件?

问题描述 投票:0回答:1

我想将我的 TS 项目编译为 ESM 和 CJS。我已经设置了两个 tsconfig 文件来执行此操作等等。

其中一个文件尝试有条件地导入包,这在每个环境中都必须以不同的方式完成。这意味着我必须有该文件的两个不同版本。但我希望其余的代码是相同的。

有没有一种方法可以确保ESM版本导入文件时,它会收到一个版本,而CJS版本会收到另一个版本?

我想尽可能减少使用捆绑器以及构建后工具和流程。

node.js typescript es6-modules commonjs tsconfig
1个回答
0
投票

有没有一种方法可以确保当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
}
© www.soinside.com 2019 - 2024. All rights reserved.