ERR_REQUIRE_ESM - TypeScript + nodemon + ts-node + node-fetch

Dan*_*cci 5 node.js typescript

我尝试将node-fetchv3 与nodemon+一起使用ts-node,但我收到了有关 ESM 的所有可能的错误。type我已经尝试了文件中package.jsoncompilerOptions.target文件中的多种组合tsconfig.json,但我无法同时编译我的脚本并在开发模式下运行它。

这是我的简单脚本:

import express from "express";
import fetch from "node-fetch";
import json from "json-server";

const app = express();

app.use("/db", json.router("db.json"));

app.use("/test", (req, res) => {
  fetch("http://localhost:3001/db");
  res.json({ ok: true });
});

app.listen(3001);
Run Code Online (Sandbox Code Playgroud)

我需要能够使用以下两个命令使其工作:

tsc && node index.js
nodemon -r ts-node index.ts
Run Code Online (Sandbox Code Playgroud)

应该如何package.json配置tsconfig.json才能使这两个命令正常工作?

请注意,一旦我添加node-fetch到项目中,问题就会开始出现。

Sha*_*jib 10

目前将 typescript 编译为本机 ESM 非常困难,我建议将 node-fetch 降级为2.6.5.

Node Fetch 开始发布 ES 模块,请3.0.0参阅此处: https: //github.com/node-fetch/node-fetch/blob/main/docs/v3-UPGRADE-GUIDE.md#breaking

如果您想走困难路线,可以关注此博客: https: //2ality.com/2021/06/typescript-esm-nodejs.html

问题是您无法使用require('some-module')它构建为 ESM。由于您要编译为 commonjs 模块,因此需要进行一些转译才能使它们与 ESM 一起使用。

Typescript 在Typescript 4.5nodenext上作为模块选项添加