有没有一种方法可以创建一个ESM和CJS应用程序都可以使用的模块



我有一个后端CJS应用程序&前端ESM应用程序。以及我在ESM中创建的一个节点模块。节点模块适用于我的ESM应用程序,因为它们都使用ESMimport语法。尝试在CJS应用程序中使用它显然会引发错误,因为它无法读取ESMimport语法。

我尝试使用Rollup.jsESM代码转换为CJS,并在package.json文件中使用conditional exports,但这不起作用。

假设它是一个类似的库

my-library.js

// No require on top. They will be local to their use.
const myLibrary = ...
// export default instead of module.exports
export default myLibrary

库必须首先将其扩展名重命名为.mjs("my library.js"="my library.msj"(

然后,

在CJS(Node.js(中=>

动态导入:

const {default: myUtilityLib } = await import("./my-library.mjs");

在ESM(浏览器(中=>

正常标准进口:

import myUtilityLib from "./my-library.mjs"

相关内容

最新更新