SyntaxError:不能在没有模块的情况下使用导入语句,TypeError [ERR_UNKNOWN_FILE_EXTENSION]:Catch 22

Posted

技术标签:

【中文标题】SyntaxError:不能在没有模块的情况下使用导入语句,TypeError [ERR_UNKNOWN_FILE_EXTENSION]:Catch 22【英文标题】:SyntaxError: Cannot use import statment without a module, TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Catch 22 【发布时间】:2020-10-28 17:13:09 【问题描述】:

我在使用 node js 时遇到了问题。

这里是相关代码(app.ts):

const express = require("express");
const auth = require("./service/auth");

import  Request, Response  from "express";

import User from "./model/User";
import con from "./config/db";

const port = 3000;

const app = express();

app.use(express.json());
...

我得到的错误是:

(node:16524) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
C:\Users\010bo\OneDrive\Documents\GitHub\rpg-backend\app\app.ts:4
import  Request, Response  from "express";
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:1117:16)
    at Module._compile (internal/modules/cjs/loader.js:1165:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1221:10)
    at Module.load (internal/modules/cjs/loader.js:1050:32)
    at Function.Module._load (internal/modules/cjs/loader.js:938:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47

所以我寻找解决方案并发现: SyntaxError: Cannot use import statement outside a module

这告诉我:

将 "type": "module" 添加到最近的父 package.json 中

所以在 package.json 中添加 "type": "module"。我现在得到的输出是:

internal/modules/run_main.js:54
    internalBinding('errors').triggerUncaughtException(
                              ^

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for C:\Users\010bo\OneDrive\Documents\GitHub\rpg-backend\app\app.ts
[90m    at Loader.defaultGetFormat [as _getFormat] (internal/modules/esm/get_format.js:65:15)[39m
[90m    at Loader.getFormat (internal/modules/esm/loader.js:98:42)[39m
[90m    at Loader.getModuleJob (internal/modules/esm/loader.js:227:31)[39m
[90m    at async Loader.import (internal/modules/esm/loader.js:161:17)[39m 
  code: [32m'ERR_UNKNOWN_FILE_EXTENSION'[39m

于是我再次上网,寻找解决办法,发现:Can't run my Node.js Typescript project TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/src/App.ts

这告诉我:

从 package.json 中移除 "type": "module"

所以我认为我发现自己处于第 22 条陷阱的境地。我不确定下一步该去哪里。

我还尝试了SyntaxError: Cannot use import statement outside a module中的其他解决方案

使用 .mjs 扩展名明确命名文件。所有其他文件,例如 .js 将被解释为 CommonJS,如果 package.json 中未定义类型,则这是默认的。

这不起作用,要么给我同样的错误,要么给我一个不同的语法错误,我认为是因为我使用的是打字稿。

提前感谢任何可以提供帮助的人。

【问题讨论】:

【参考方案1】:
const  Request, Response  = require("express")

其他的也一样。

【讨论】:

以上是关于SyntaxError:不能在没有模块的情况下使用导入语句,TypeError [ERR_UNKNOWN_FILE_EXTENSION]:Catch 22的主要内容,如果未能解决你的问题,请参考以下文章

Angular.ts 和 Electron:SyntaxError:不能在模块外使用 import 语句

笑话 - 语法错误:不能在模块外使用 import 语句

Python之import

Node12/next9 SyntaxError:无法在模块外使用导入语句

不能在模块外使用 import 语句

Mocha + TypeScript:不能在模块外使用导入语句