【发布时间】:2021-07-22 21:45:03
【问题描述】:
我有一个后端 CJS 应用程序和一个前端 ESM 应用程序。还有一个我在 ESM 中创建的节点模块。
节点模块适用于我的 ESM 应用程序,因为它们都使用 ESM import 语法。
尝试在 CJS 应用程序中使用它显然会引发错误,因为它无法读取 ESM import 语法。
我尝试使用Rollup.js 将ESM 代码转换为CJS 并在我的package.json 文件中使用conditional exports,但这不起作用。
【问题讨论】:
-
重要问题:为什么?节点can import either,只要你的项目和你的依赖项目,清楚地表明它们使用哪种风格的ES(即如果你的代码使用ESM,你需要在你的
package.json中指定type: "module") -
@Mike'Pomax'Kamermans 嗨,迈克。而且因为我有一个像 dataUtils 这样的文件,它用于我的前端应用程序,也用于我的后端 api 应用程序。因此,将其放入该文件的 npm 包中是有意义的。因此,当我的后端 api 使用它时,我需要在 CJS 中使用它,而当我的前端应用程序使用它时,我需要在 ES6 中使用它。
-
不,你没有。您可以为两者编写 ES6,因为 Node 可以完美地导入和运行 ES6,即使在本身是 CJS 的项目中:如果您的代码使用 ES 模块,只需在
package.json中设置正确的值而不是传统的 commonjs 需要方法。
标签: javascript node.js commonjs rollupjs mjs