ts-node 如何启用 ESM

  • 首先将 package.json​ 中的 type 设置为 module​,以启用 Node.js 对 ES Modules 的支持

  • 另外,如果项目中没有配置 tsconfig.json,运行可能还会报错:ReferenceError: exports is not defined in ES module scope​​​​​

    • 需配置 tsconfig.json :

      • {
          "compilerOptions": {
            "target": "ES6",
            "module": "ESNext",
            "moduleResolution": "node"
          }
        }
        
  • 如果使用的 ts-node 的版本号 >= v10.7.0​​,可直接使用 ts-node-esm​​ 或 ts-node --esm​​ 命令

  • 如果不想每次都加参数,也可以在 tsconfig.json 中添加配置项实现自动化

    • {
        "ts-node": {
          "esm": true
        }
      }
      
    • 之后使用 ts-node​​ 启动即可
  • 如果使用的是之前的旧版本,使用 node --loader ts-node/esm ./src/index.ts​​​

    • 会有个试验特性的警告,如不想看到这个警告,可以再附加上一个参数 --no-wcarnings​​,node --no-warnings --loader ts-node/esm ./src/index.ts​​
  • 参考: