;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。