#node.js #typescript
Вопрос:
Я пытаюсь использовать 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 amp;amp; node index.js
nodemon -r ts-node index.ts
Как должно быть package.json
и tsconfig.json
настроено, чтобы обе команды работали?
Пожалуйста, обратите внимание, что проблемы начинаются, как только я добавляю node-fetch
в проект.
Ответ №1:
В настоящее время очень сложно скомпилировать машинописный текст в собственный ESM, в который я рекомендую понизить node-fetch 2.6.5
.
Выборка узлов начала отправлять модули 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 добавляется nodenext
в качестве опции модуля в typescript 4.5
Комментарии:
1. Спасибо, интересное чтение. Я не буду следовать вашему предложению, я предпочитаю жесткий маршрут: одна из целей моего вопроса-понять, как работать с модулями ESM.