Node.js で「fetch is not defined」が解決できない(古い Node)
グローバル fetch は Node.js 18 で標準搭載された。
18 未満では未定義になるため、Node を更新するか node-fetch を導入すると解決する。
公開:
要約
ReferenceError: fetch is not defined は、使っている Node.js にグローバル fetch が無いときに出る。fetch は Node.js 18 で標準搭載されたため、18 以降へ更新すれば解決する。
更新できない環境では node-fetch を導入する。
よくある原因
- Node.js が古い: グローバル
fetchは Node.js 18 で追加された。
18 未満では未定義になる。 - ブラウザ前提のコード: ブラウザの
fetchを前提にしたコードを、そのまま古い Node.js で実行している。 - 明示的に無効化:
--no-experimental-fetchを付けると、18 以降でも fetch は消える。
解決策
1. Node.js を更新する(推奨)
バージョンを確認し、18 以降(できれば LTS)へ上げる。
node -vnvm を使っているなら nvm install --lts で更新できる。
2. パッケージで補う
Node.js を上げられない場合は node-fetch を導入する。
npm install node-fetchimport fetch from "node-fetch";
const res = await fetch("https://example.com");
console.log(res.status);3. Node.js 16 で暫定的に有効化する
16 系では実験フラグで使える。
node --experimental-fetch app.jsグローバル fetch が 18 で追加された経緯は公式のリリースアナウンス(新しいタブで開く)に記載されている。