Error: require() of ES modules is not supported when importing node-fetch


I’m creating a program to analyze security camera streams and got stuck on the very first line. At the moment my .js file has nothing but the import of node-fetch and it gives me an error message. What am I doing wrong?

Running Ubuntu 20.04.2 LTS in Windows Subsystem for Linux.

Node version:

[email protected]:~/CAMSERVER$ node -v

node-fetch package version:

[email protected]:~/CAMSERVER$ npm v node-fetch

[email protected] | MIT | deps: 2 | versions: 63
A light-weight module that brings Fetch API to node.js

keywords: fetch, http, promise, request, curl, wget, xhr, whatwg

.shasum: 79da7146a520036f2c5f644e4a26095f17e411ea
.integrity: sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==
.unpackedSize: 75.9 kB

data-uri-to-buffer: ^3.0.1 fetch-blob: ^3.1.2         

- endless <[email protected]>
- bitinn <[email protected]>
- timothygu <[email protected]>
- akepinski <[email protected]>

latest: 3.0.0        next: 3.0.0-beta.10  

published 3 days ago by endless <[email protected]>

esm package version:

[email protected]:~/CAMSERVER$ npm v esm

[email protected] | MIT | deps: none | versions: 140
Tomorrow's ECMAScript modules today!

keywords: commonjs, ecmascript, export, import, modules, node, require

.shasum: 342c18c29d56157688ba5ce31f8431fbb795cc10
.integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
.unpackedSize: 308.6 kB

- jdalton <[email protected]>

latest: 3.2.25  

published over a year ago by jdalton <[email protected]>

Contents of the .js file (literally nothing but the import):

[email protected]:~/CAMSERVER$ cat server.js 
import fetch from "node-fetch";


[email protected]:~/CAMSERVER$ node -r esm server.js 
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /home/user/CAMSERVER/node_modules/node-fetch/src/index.js
require() of ES modules is not supported.
require() of /home/user/CAMSERVER/node_modules/node-fetch/src/index.js from /home/user/CAMSERVER/server.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /home/user/CAMSERVER/node_modules/node-fetch/package.json.

    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1089:13) {
[email protected]:~/CAMSERVER$ 


node-fetch v3 is ESM-only: The esm module you’re adding is for adding ESM compatibility, but it’s unnecessary now that Node 12+ supports ESM natively; and it doesn’t work with ESM-only packages like node-fetch 3+.

To fix your issue:

  1. Remove the esm package.
  2. Add "type": "module" to your package.json.

And that’s it. Then when you run node server.js it should work.


Leave a Reply

Your email address will not be published. Required fields are marked *