node.js - ERR_REQUIRE_ESM - TypeScript + nodemon + ts-node + node-fetch
问题描述
我正在尝试将node-fetch
v3 与nodemon
+一起使用ts-node
,但我得到了有关 ESM 的所有可能错误。我尝试type
了package.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
到项目中,问题就会开始。
解决方案
目前很难将 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
为模块选项
推荐阅读
- gcc - why GCC Build always have errors like this?
- python - What is the use of tensorflow backend utilities?
- regex - 用于替换某个块中的 xml 值的正则表达式
- ruby - 我必须做一个猜一个包含函数但不断出错的随机数的红宝石游戏
- hex - 如何从 Codesys 中的 Byte ASCII 值中获取字符
- .htaccess - 可以访问文件夹内网络服务器中的文件,但仅输入所述文件的文件夹名称时会出现“禁止”
- scala - 在 Scala 中按名称调用和按值调用中使用 val 和 def
- python - 在 Pandas Dataframe 中“循环”每一天并从相应列中提取值
- linux - 在 Kubernetes 环境中设置 read_ahead_kb
- cocoapods - 如何将 Azure 管道用于私有 pod?