できない.dev

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 を導入する。

よくある原因

  1. Node.js が古い: グローバル fetch は Node.js 18 で追加された。
    18 未満では未定義になる。
  2. ブラウザ前提のコード: ブラウザの fetch を前提にしたコードを、そのまま古い Node.js で実行している。
  3. 明示的に無効化: --no-experimental-fetch を付けると、18 以降でも fetch は消える。

解決策

1. Node.js を更新する(推奨)

バージョンを確認し、18 以降(できれば LTS)へ上げる。

node -v

nvm を使っているなら nvm install --lts で更新できる。

2. パッケージで補う

Node.js を上げられない場合は node-fetch を導入する。

npm install node-fetch
import 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 で追加された経緯は公式のリリースアナウンス(新しいタブで開く)に記載されている。

この記事は役立ちましたか?