是否可以在 Node.JS 命令行程序中同时使用 CommonJS 和 ES6 模块?
Is it possible to use both CommonJS and ES6 module in a Node.JS command-line program?
我正在开发 CLI 工具。我使用“commander”(一个 CommonJS 模块)来解析命令行参数。我还想使用“p-map”来管理并发。但是,“p-map”是一个 ES6 模块。
我也在使用 Typescript。
现在代码编辑器和 Typescript 编译器都不会报错了。但是我无法执行我的 CLI 工具。如果我用“module”:“commonjs”编译,节点将不会加载 p-map 并抱怨“必须使用导入来加载 ES 模块... node_modules/p-map/index.js...ES 模块的 require() 不是支持的。”。如果我用“module”:“es2015”编译,使用“require”导入CommonJS模块,并在我的package.json中添加“type”:“module”,节点会报错“ReferenceError: require is not defined” .
我喜欢Typescript/Javascript的灵活性,但是,这样的时间让我很想念Java。 Java 可能太拘谨了,但我不会花几个小时来弄清楚导入/导出……
那么,是否可以在Node.JS命令行程序中同时使用 CommonJS 和 ES6 模块?
为了增强兼容性,(较新的)节点 esm 加载程序 can import
cjs-modules(例如 import identifier from 'cjs-module-name';
)。
反过来行不通,你不能 require
一个 esm 模块,但是 dynamic import 应该可以,如果真的有必要的话。
相关阅读可能是关于该主题的 statement from p-map's owner。
我正在开发 CLI 工具。我使用“commander”(一个 CommonJS 模块)来解析命令行参数。我还想使用“p-map”来管理并发。但是,“p-map”是一个 ES6 模块。
我也在使用 Typescript。
现在代码编辑器和 Typescript 编译器都不会报错了。但是我无法执行我的 CLI 工具。如果我用“module”:“commonjs”编译,节点将不会加载 p-map 并抱怨“必须使用导入来加载 ES 模块... node_modules/p-map/index.js...ES 模块的 require() 不是支持的。”。如果我用“module”:“es2015”编译,使用“require”导入CommonJS模块,并在我的package.json中添加“type”:“module”,节点会报错“ReferenceError: require is not defined” .
我喜欢Typescript/Javascript的灵活性,但是,这样的时间让我很想念Java。 Java 可能太拘谨了,但我不会花几个小时来弄清楚导入/导出……
那么,是否可以在Node.JS命令行程序中同时使用 CommonJS 和 ES6 模块?
为了增强兼容性,(较新的)节点 esm 加载程序 can import
cjs-modules(例如 import identifier from 'cjs-module-name';
)。
反过来行不通,你不能 require
一个 esm 模块,但是 dynamic import 应该可以,如果真的有必要的话。
相关阅读可能是关于该主题的 statement from p-map's owner。