"语法错误:无法在TypeScript(nodemon)和Node.js(带有Docker)中的模块""外部使用import语句

sqxo8psd  于 2023-02-13  发布在  TypeScript
关注(0)|答案(1)|浏览(118)

在我的Web应用的服务器目录中(在TypeScript中),我有一个nodemon命令(在更改后重新运行代码),如下所示:nodemon dist/index.js
但是,现在运行它会抛出以下错误:

/path/to/app/server/src/entities/Post.ts:1
import { Field, Int, ObjectType } from "type-graphql";
^^^^^^

SyntaxError: Cannot use import statement outside a module

从我在这里读到的内容来看,这个错误的原因通常是Node.js默认情况下需要CommonJS语法(例如,在this question中)。

"target": "es2017",
"module": "commonjs",
"moduleResolution": "node",
"lib": ["dom", "es6", "es2017", "esnext.asynciterable"],
"skipLibCheck": true,

(In未指定我的package.json"type"。)
tsconfig.json中,"module"被指定为"commonjs",看起来tsc编译JavaScript是正确的,运行tsc没有给我任何错误,而/dist中的同一个文件使用exports语法(例如Object.defineProperty(exports, "__esModule", { value: true });),这是正确的CommonJS语法,对吗?
ts-node运行相同的nodemon命令不会返回任何错误:nodemon --exec ts-node src/index.ts
有趣的是,我只是在/server中初始化Docker构建后才开始收到此错误,如下所示:docker build -t [username]/[project]:[version] .
任何试图让Node使用ES的尝试(在package.json中设置"type": "module"和更改"module"似乎只会带来更多的错误。(我重新生成/dist是为了确保它不是由旧的编译文件引起的。)
版本:

  • 一个月二十三个月一个月:一个月二十四个月一个月
  • 一个月二十五日一个月:一个月二十六日一个月
  • 一个月二十七个月一个月:一个月二十八个月一个月

我到底做错了什么?
任何帮助将不胜感激!

4dbbbstv

4dbbbstv1#

嗯,我会做一个有根据的猜测,奇怪的是,从你的错误中,你看起来有/path/to/app/server/src/entities/Post.ts(注意ts扩展名和路径来自src而不是dist),但您运行的是dist中的js文件。从技术上讲,您应该只看到导入的.js文件。我怀疑您不知何故错误地导入了src/entities/Post.ts。例如,你可以沿着../src/entities/Post.ts的路线做一些事情,这将打破dist并使其进入src。无论如何,关键是不知何故,你是从src而不是dist导入Post.ts。
这也解释了为什么从ts-node运行可以工作,而从./dist/index.js运行不行。如果不清楚下一步应该做什么,请随时在这里留下评论,这样我可以帮助您进一步调试。

相关问题