首页 > 解决方案 > ERR_REQUIRE_ESM - TypeScript + nodemon + ts-node + node-fetch

问题描述

我正在尝试将node-fetchv3 与nodemon+一起使用ts-node,但我得到了有关 ESM 的所有可能错误。我尝试typepackage.json文件中和文件compilerOptions.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);

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

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

应该如何配置以package.json使tsconfig.json这两个命令都起作用?

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

标签: node.jstypescript

解决方案


目前很难将 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#break

如果你想走硬路线,你可以关注这个博客:https ://2ality.com/2021/06/typescript-esm-nodejs.html

问题是您不能使用require('some-module')内置为 ESM 的。由于您正在编译为 commonjs 模块,因此需要进行一些转译以使它们与 ESM 一起使用。

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


推荐阅读