"SyntaxError: Cannot use import statement outside a module" error in ts-node while modules are CommonJS

"SyntaxError: Cannot use import statement outside a module" error in ts-node while modules are CommonJS

“SyntaxError: Cannot use import statement outside a module”错误的主要原因是非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-node 将无法理解别名并且会出错

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

尽管 ts-node 不理解 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"
    ]
  }
}

但是 module 已经是 CommonJS 并且 esModuleInterop 已经是 true,所以我一定不要覆盖它(但即使是尝试,也没有改变)

这种情况是没有安装的原因ts-node。 我通过 nodemon 执行了我的 .ts 文件,它在目标时委托 ts-node 的执行文件是 .ts,但必须安装 ts-node