Búsqueda de sitios web

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


Estoy tratando de usar node-fetch v3 con nodemon + ts-node, pero he recibido todos los posibles errores relacionados con ESM. He probado muchas combinaciones de type en el archivo package.json y compilerOptions.target en el archivo tsconfig.json, pero no puedo compilar mi script y ejecutarlo en modo desarrollo simultáneamente.

Este es mi guion sencillo:

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

Necesito poder hacer que funcione con los siguientes dos comandos:

tsc && node index.js
nodemon -r ts-node index.ts

¿Cómo deberían estar configurados package.json y tsconfig.json para que ambos comandos funcionen?

Tenga en cuenta que los problemas comienzan tan pronto como agrego node-fetch al proyecto.

Respuesta #1

Actualmente es muy difícil compilar TypeScript a ESM nativo. Recomiendo degradar node-fetch a 2.6.5.

Node Fetch empezó a distribuir Módulos ES desde 3.0.0 ver aquí: https://github.com/node-fetch/node-fetch/blob/main/docs/v3-UPGRADE-GUIDE.md#breaking

Si quieres tomar el camino difícil, puedes seguir este blog: https://2ality.com/2021/06/typescript-esm-nodejs.html

El problema es que no puedes usar require('some-module') que está diseñado para ser un ESM. Dado que estás compilando a módulos commonjs, será necesario hacer algo de transpilación para que funcionen con ESM.

Typescript está agregando nodenext como una opción de módulo en Typescript 4.5

Artículos relacionados