打字稿无法正确编译到commonjs / es2015

时间:2020-07-09 07:37:43

标签: javascript typescript tsc ts-node

我正在运行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使用将"type": "module"添加到package.json的模块。之后,错误更改为:

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,我需要所有的打字稿导入以使用.JS扩展名。示例:import { foo } from '../bar.js,否则抛出类似Error [ERR_MODULE_NOT_FOUND]: Cannot find module D:/...的错误。当然,可以防止我使用ts-node-dev引发上述错误。

1 个答案:

答案 0 :(得分:1)

问题出在ormconfig.js,其中我的实体路径指向.ts文件而不是.js

解决方案:

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