"SyntaxError: Cannot use import statement outside a module" 个错误在 ts-node 中,而模块是 CommonJS



;SyntaxError:不能在模块外使用import语句"错误是非CommonJS模块(tsconfig.json中的compilerOptions.module(,但我在"module": "CommonJS"中得到了相同的错误。

最初,我的tsconfig.json是:

{
"compilerOptions": {
"target": "ES2020",
"module": "CommonJS",
"moduleResolution": "node",
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": false,
"experimentalDecorators": true,
"baseUrl": "./01-Source",
"paths": {
"@EnterpriseBusinessRules/*": [ "./BusinessRules/Enterprise/*"],
// Other aliases
}
}
}

但是有了这个配置,ts节点将无法理解别名,这将是错误的

Error: Cannot find module '@EnterpriseBusinessRules/XXX/NNN'

尽管ts节点不理解alieses,但它理解import。为了解决别名问题,我添加了

{
"compilerOptions": { /* */ },
"ts-node": {
"require": [
"tsconfig-paths/register"
]
}
}

部分到*tsconfig.json,现在错误是

import {
^^^^^^
SyntaxError: Cannot use import statement outside a module

我知道在ts-node组中,我们可以覆盖compilerOptions,比如:

{
"ts-node": {
"compilerOptions": {
"module": "CommonJS",
"esModuleInterop": true
},
"require": [
"tsconfig-paths/register"
]
}
}

但是模块已经是CommonJS并且esModuleInterop已是true,所以我不能覆盖它(但即使是尝试,也不会改变(

在这种情况下,原因没有安装ts节点。我通过nodemon执行了.ts文件,当目标文件为.s时,它会延迟ts节点的执行,但必须安装ts-node

最新更新