Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 获取错误类型错误[错误未知文件扩展名]:未知文件扩展名&引用;对于节点Js v14的D:\Projects\matri site\bin\www_Javascript_Node.js_Express_Es6 Module Loader - Fatal编程技术网

Javascript 获取错误类型错误[错误未知文件扩展名]:未知文件扩展名&引用;对于节点Js v14的D:\Projects\matri site\bin\www

Javascript 获取错误类型错误[错误未知文件扩展名]:未知文件扩展名&引用;对于节点Js v14的D:\Projects\matri site\bin\www,javascript,node.js,express,es6-module-loader,Javascript,Node.js,Express,Es6 Module Loader,我是Node js的新手,遇到了一些问题。以前我使用NodeJSV13.8运行我的express应用程序,它运行得非常好。我使用的是es6语法和带有JS扩展文件的类型模块。但是,当我升级到节点14.1.0时。它显示了以下错误(与13.9相同的错误) 类型错误[ERR\u UNKNOWN\u FILE\u EXTENSION]:D:\Projects\matri site\bin\www的未知文件扩展名“” 当我再次降级到节点13.8时,它工作正常 这是我的package.json文件: {

我是Node js的新手,遇到了一些问题。以前我使用NodeJSV13.8运行我的express应用程序,它运行得非常好。我使用的是es6语法和带有JS扩展文件的类型模块。但是,当我升级到节点14.1.0时。它显示了以下错误(与13.9相同的错误)

类型错误[ERR\u UNKNOWN\u FILE\u EXTENSION]:D:\Projects\matri site\bin\www的未知文件扩展名“”

当我再次降级到节点13.8时,它工作正常

这是我的package.json文件:

{
“名称”:“matri站点”,
“版本”:“0.0.0”,
“私人”:没错,
“类型”:“模块”,
“脚本”:{
“开始”:“节点。/bin/www”
},
“依赖项”:{
“bcryptjs”:“^2.4.3”,
“缓冲区”:“^5.5.0”,
“cookie解析器”:“~1.4.4”,
“调试”:“~2.6.9”,
“快车”:“4.16.1”,
“把手”:“^4.7.6”,
“http错误”:“~1.6.3”,
“翡翠”:“~1.11.0”,
“jsonwebtoken”:“^8.5.1”,
“猫鼬”:“^5.8.9”,
“摩根”:“~1.9.1”,
“nodeEmailer”:“^6.4.2”,
“redis”:“^3.0.2”,
“验证器”:“^12.1.0”,
“validatorjs”:“^3.18.1”
},
“依赖性”:{
“eslint”:“^6.8.0”
}

}
我通过为我的WWW文件提供.js扩展名解决了这个问题。我不确定为什么它需要为节点13.9和更高版本进行扩展,而它在13.8版上运行得非常完美。

好的,如果您成功了,我会在这里编写解决方案,此外,我还会告诉您错误的原因。
WWW需要一个扩展,比如.js(WWW.js)。这是因为get_format.js试图获取exetension的类型,这都是在控制台生成的错误中写入的。

真正的原因是ESM支持的新规范。也就是说,包含
#的文件/usr/bin/env节点
“type”:“module”
时需要扩展名。本机ESM需要
.js
扩展名来识别它是否是ESM(如果您的代码实际上是用commonjs编写的,则需要指定.cjs扩展名),这就是为什么它抱怨
TypeError[ERR\u UNKNOWN\u FILE\u extension]:UNKNOWN FILE extension”“


也就是说,如果要使用本机ESM,您将在package.json中定义
“type”:“module”
,文件名必须包含
.js
扩展名,即
file.js
。否则,不要指定“类型”(或指定“
type”:“commonjs”
),文件名可以有扩展名
.js
,也可以没有扩展名。对于这种情况下的ESM,您需要有“.mjs”扩展名。

您是否尝试将扩展名放入WWW文件?例如WWW.js是的,我做了。。这对我很有效。你能告诉我为什么它和js扩展一起工作而以前不工作吗。。我想知道为什么在Node 13.8版本中没有扩展就可以工作?我不确定,但我们可能认为在Node的另一个版本中,这个控件不存在。你能投票并接受解决方案吗?这在节点v15中对我不起作用——当你说“对于ESM,在这种情况下,你需要有“.mjs”扩展名时,仍然会出现错误。这是说如果我们不想在导入语句中使用扩展名,文件上必须是mjs扩展名?我说明了问题的根本原因,并提出了两种解决方案。我不确定是否可以通过
package.json
使用
bare说明符来解决这个问题。