Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以在Node.JS命令行程序中同时使用CommonJS和ES6模块?_Javascript_Node.js_Typescript_Ecmascript 6_Module - Fatal编程技术网

Javascript 是否可以在Node.JS命令行程序中同时使用CommonJS和ES6模块?

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

我正在使用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可能太挑剔了,但我不会花几个小时试图弄清楚导入/导出


因此,是否可以在Node.JS命令行程序中同时使用CommonJS和ES6模块?

为了增强兼容性,可以使用(中等新的)Node esm加载程序(例如,
从“cjs模块名称”导入标识符;

另一种方法不起作用,您不能
要求
一个esm模块,但如果真的需要,应该可以工作


相关阅读可能与本主题有关。

使用ESM并导入cjs模块。那个或者,如链接页面所述,如果确实需要,您可以使用动态导入进行其他方式。感谢您的回复!我尝试了ECM导入cjs模块,是的,它工作正常。我不知道我可以导入cjs模块,而不仅仅是使用“require()”。我还尝试了动态导入。它应该会起作用。但是问题是Typescript总是将我的dynamic import()编译成require()。请将您的回答作为答案,这样我就可以接受它作为正确答案了?再次感谢!