【发布时间】:2021-06-05 20:42:22
【问题描述】:
我正在开发 CLI 工具。我使用“commander”(一个 CommonJS 模块)来解析命令行参数。我还想使用“p-map”来管理并发。但是,“p-map”是一个 ES6 模块。
我也在使用 Typescript。
现在代码编辑器和 Typescript 编译器都不会抱怨了。但是我无法执行我的 CLI 工具。如果我使用“module”编译:“commonjs”,节点将不会加载 p-map 并抱怨“必须使用导入来加载 ES 模块... node_modules/p-map/index.js ...require() of ES modules不支持。”。如果我用 "module":"es2015" 编译,使用 "require" 导入 CommonJS 模块,并在我的 package.json 中添加 "type":"module",节点会报错 "ReferenceError: require is not defined"。
我喜欢 Typescript/Javascript 的灵活性,但是,是时候让我怀念 Java。 Java 可能太麻烦了,但我不会花几个小时来弄清楚导入/导出......
那么,是否可以在 Node.JS 命令行程序中同时使用 CommonJS 和 ES6 模块?
【问题讨论】:
-
使用 ESM 并导入 cjs 模块。那should work。或者,如链接页面所述,如果确实需要,您可以使用其他方式动态导入。
-
感谢您的回复!我尝试了 ECM 导入 cjs 模块,是的,它可以工作。我不知道我可以导入 cjs 模块,而不仅仅是使用“require()”。我也尝试过动态导入。它应该工作。但是问题是 Typescript 总是将我的动态 import() 编译成 require()。
-
请您将您的回复作为答案,以便我接受它作为正确答案吗?再次感谢!
标签: javascript node.js typescript ecmascript-6 module