Javascript 是否可以在Node.JS命令行程序中同时使用CommonJS和ES6模块?
我正在使用CLI工具。我使用了CommonJS模块“commander”来解析命令行参数。我还想使用“p-map”来管理并发性。然而,“p-map”是一个ES6模块 我也在用打字脚本 现在代码编辑器和类型脚本编译器都不会抱怨了。但是,我无法执行CLI工具。如果我使用“module”:“commonjs”编译,node不会加载p-map,并抱怨“必须使用导入加载ES模块…node_modules/p-map/index.js…不支持ES模块的require()。如果我使用“module”:“es2015”编译,使用“require”导入CommonJS模块,并在my package.json中添加“type”:“module”,节点会抱怨“ReferenceError:require未定义” 我喜欢Typescript/Javascript的灵活性,但是,是时候让我怀念Java了。Java可能太挑剔了,但我不会花几个小时试图弄清楚导入/导出Javascript 是否可以在Node.JS命令行程序中同时使用CommonJS和ES6模块?,javascript,node.js,typescript,ecmascript-6,module,Javascript,Node.js,Typescript,Ecmascript 6,Module,我正在使用CLI工具。我使用了CommonJS模块“commander”来解析命令行参数。我还想使用“p-map”来管理并发性。然而,“p-map”是一个ES6模块 我也在用打字脚本 现在代码编辑器和类型脚本编译器都不会抱怨了。但是,我无法执行CLI工具。如果我使用“module”:“commonjs”编译,node不会加载p-map,并抱怨“必须使用导入加载ES模块…node_modules/p-map/index.js…不支持ES模块的require()。如果我使用“module”:“es2
因此,是否可以在Node.JS命令行程序中同时使用CommonJS和ES6模块?为了增强兼容性,可以使用(中等新的)Node esm加载程序(例如,
从“cjs模块名称”导入标识符;
)
另一种方法不起作用,您不能要求一个esm模块,但如果真的需要,应该可以工作
相关阅读可能与本主题有关。使用ESM并导入cjs模块。那个或者,如链接页面所述,如果确实需要,您可以使用动态导入进行其他方式。感谢您的回复!我尝试了ECM导入cjs模块,是的,它工作正常。我不知道我可以导入cjs模块,而不仅仅是使用“require()”。我还尝试了动态导入。它应该会起作用。但是问题是Typescript总是将我的dynamic import()编译成require()。请将您的回答作为答案,这样我就可以接受它作为正确答案了?再次感谢!