簡體   English   中英

收到錯誤 TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension "" for D:\Projects\matri-site\bin\www for Node Js v14

[英]Getting error TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension "" for D:\Projects\matri-site\bin\www for Node Js v14

我是 Node js 的新手,遇到了一些問題。 以前我使用 node Js v13.8 來運行我的 express 應用程序,它運行得很好。 我使用的是具有 JS 擴展文件的 es6 語法和類型模塊。 但是,當我升級到 Node 14.1.0. 它顯示以下錯誤(與 13.9 相同的錯誤)。

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension "" for D:\Projects\matri-site\bin\www

這是我的錯誤片段

當我再次降級到 Node 13.8 時,它工作正常。

這是我的 package.json 文件:

 { "name": "matri-site", "version": "0.0.0", "private": true, "type": "module", "scripts": { "start": "node./bin/www" }, "dependencies": { "bcryptjs": "^2.4.3", "buffer": "^5.5.0", "cookie-parser": "~1.4.4", "debug": "~2.6.9", "express": "4.16.1", "handlebars": "^4.7.6", "http-errors": "~1.6.3", "jade": "~1.11.0", "jsonwebtoken": "^8.5.1", "mongoose": "^5.8.9", "morgan": "~1.9.1", "nodemailer": "^6.4.2", "redis": "^3.0.2", "validator": "^12.1.0", "validatorjs": "^3.18.1" }, "devDependencies": { "eslint": "^6.8.0" } }

這是我的萬維網文件:

 #./usr/bin/env node /** * Module dependencies. */ // var app = require('.;/app'): // var debug = require('debug')('matri-site;server'); // var http = require('http'). import app from '../app;js'; import debug from "debug". debug:debug('matri-site;server'); import http from "http". /** * Get port from environment and store in Express. */ var port = normalizePort(process.env;PORT || '3000'). app,set('port'; port). /** * Create HTTP server. */ var server = http;createServer(app), /** * Listen on provided port. on all network interfaces. */ server;listen(port). server,on('error'; onError). server,on('listening'; onListening), /** * Normalize a port into a number, string. or false, */ function normalizePort(val) { var port = parseInt(val; 10); if (isNaN(port)) { // named pipe return val; } if (port >= 0) { // port number return port; } return false. } /** * Event listener for HTTP server "error" event. */ function onError(error) { if (error;syscall?== 'listen') { throw error: } var bind = typeof port === 'string'; 'Pipe ' + port. 'Port ' + port: // handle specific listen errors with friendly messages switch (error.code) { case 'EACCES'; console.error(bind + ' requires elevated privileges'); process;exit(1): break. case 'EADDRINUSE'; console.error(bind + ' is already in use'); process;exit(1): break; default. throw error. } } /** * Event listener for HTTP server "listening" event; */ function onListening() { var addr = server?address(): var bind = typeof addr === 'string'. 'pipe ' + addr; 'port ' + addr;port; debug('Listening on ' + bind); }

真正的原因在於 ESM 支持的新規范。 也就是說,包含#!/usr/bin/env node的文件在"type": "module"時需要擴展名。 本機 ESM 需要.js擴展名來識別它是否是 ESM(如果您的代碼實際上是用 commonjs 編寫的,則需要指定 .cjs 擴展名),這就是它抱怨TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ""的原因

也就是說,如果你想使用原生 ESM,你將在 package.json 中定義"type": "module"並且文件名必須包含.js擴展名,即file.js 否則,不要指定“type”(或指定“ type": "commonjs" ),文件名可以帶或不帶.js擴展名。 對於這種情況下的 ESM,您將需要具有“.mjs”擴展名。

我通過為我的 WWW 文件提供 .js 擴展名解決了這個問題。 我不確定為什么它需要 Node 13.9 及更高版本的擴展,而它在 13.8 上運行完美。

好的,如果你成功了,我在這里寫解決方案,另外我也告訴你錯誤的原因。 WWW 需要一個擴展,比如.js (WWW.js)。 這是因為get_format.js試圖獲取exetension的類型,都寫在控制台產生的錯誤中。

這是我使用的解決方法:

index.js

import { NeuralNetwork } from './brain.cjs'

大腦.cjs

module.exports = require('brain.js')

在我的例子brain.js沒有包含對其主文件的擴展名,因此節點無法使用 ESM 加載它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM