Typescript没有正确编译成commonjs/es2015。

3

我正在运行 Node v14.5.0 版本,开发环境使用 ts-node-dev 工具。

尝试编译成 JS 始终会出现错误。

一开始,我尝试使用这个 tsconfig 文件:

"target": "es5",
"module": "commonjs"
"outDir": "./dist",
"rootDir": "./src"

但是当我运行 tscnode dist/app.js 时,会出现以下错误:

UnhandledPromiseRejectionWarning: D:\Dev\src\entity\BaseEntity.ts:1
import {
^^^^^^

SyntaxError: Cannot use import statement outside a module

我进行了一些研究,发现我应该告诉Node使用模块,在package.json中添加"type": "module"。然后,错误信息变成了:

Object.defineProperty(exports, "__esModule", { value: true });
                      ^

ReferenceError: exports is not defined

我继续进行了更多的研究,尝试了几个不同的方法,例如:

  • tsconfig"module": "commonjs"更改为"module": "es2015"

    这也导致无法运行ts-node-dev。它会抛出错误:Cannot use import statement outside a module.

  • tsconfig中添加 "moduleResolution": "node"

    使用此配置和“es2015”模块的tsconfig后,在我所有的TypeScript导入中都需要使用 .JS 扩展名。例如:import { foo } from '../bar.js,否则会抛出像这样的错误:Error [ERR_MODULE_NOT_FOUND]: Cannot find module D:/...。当然,这也会导致我无法使用ts-node-dev,因为它会抛出上述错误。


尝试使用以下命令强制编译器加载 tsconfig.jsontsc --p ./tsconfig.json。请参阅文档。如果有帮助,请查看我的项目此处,并查看 package.json 和 *tsconfig.json*。 - Carlo Corradini
我认为问题不在于TSC编译器没有加载tsconfig.json,因为更改已经在编译后的文件中进行了。 - Luna
尝试使用“target”:“es2015”和“module”:“commonjs”。 - Carlo Corradini
使用目标“es2015”和模块“commonjs”时,会出现相同的错误:“ReferenceError:exports未定义”。 - Luna
非常奇怪。尝试复制我的tsconfig.json(见上文)并将其用作您的主配置文件。也许缺少某些内容。 - Carlo Corradini
一样的事情。我的tsconfig是通过tsc --init生成的。:( - Luna
1个回答

1
问题出在ormconfig.js文件中,我的实体路径指向了一个.ts文件而不是一个.js文件。

解决方案:

entities: ['dist/entity/*.js'],
migrations: ['dist/migration/**/*.js']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接