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:
user@MYLLYTIN:~/CAMSERVER$ node -v
v14.17.6
node-fetch package version:
user@MYLLYTIN:~/CAMSERVER$ npm v node-fetch
[email protected] | MIT | deps: 2 | versions: 63
A light-weight module that brings Fetch API to node.js
https://github.com/node-fetch/node-fetch
keywords: fetch, http, promise, request, curl, wget, xhr, whatwg
dist
.tarball: https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0.tgz
.shasum: 79da7146a520036f2c5f644e4a26095f17e411ea
.integrity: sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==
.unpackedSize: 75.9 kB
dependencies:
data-uri-to-buffer: ^3.0.1 fetch-blob: ^3.1.2
maintainers:
- endless <[email protected]>
- bitinn <[email protected]>
- timothygu <[email protected]>
- akepinski <[email protected]>
dist-tags:
latest: 3.0.0 next: 3.0.0-beta.10
published 3 days ago by endless <[email protected]>
esm package version:
user@MYLLYTIN:~/CAMSERVER$ npm v esm
[email protected] | MIT | deps: none | versions: 140
Tomorrow's ECMAScript modules today!
https://github.com/standard-things/esm#readme
keywords: commonjs, ecmascript, export, import, modules, node, require
dist
.tarball: https://registry.npmjs.org/esm/-/esm-3.2.25.tgz
.shasum: 342c18c29d56157688ba5ce31f8431fbb795cc10
.integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
.unpackedSize: 308.6 kB
maintainers:
- jdalton <[email protected]>
dist-tags:
latest: 3.2.25
published over a year ago by jdalton <[email protected]>
Contents of the .js file (literally nothing but the import):
user@MYLLYTIN:~/CAMSERVER$ cat server.js
import fetch from "node-fetch";
Result:
user@MYLLYTIN:~/CAMSERVER$ node -r esm server.js
/home/user/CAMSERVER/node_modules/node-fetch/src/index.js:1
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) {
code: 'ERR_REQUIRE_ESM'
}
user@MYLLYTIN:~/CAMSERVER$
require
andmodule.exports
, and the ES syntax, that useimport * from "path"
style of module. By default, nodejs will try to load modules with the CommonJS syntax. If you want to use theES
syntax, you must specify"type":"module"
in your package.json. But you can't mix them up. You can use one syntax, but not both. – Incendiarism--input-type=module
– Incendiarismnode-fetch
doesn't work for me, as im already working with es6+ syntax – Viewtsconfig.json
forcompilerOptions.module
, which is probablycommonjs
. If that's true, even though you're writing ES6-styleimport
statements, TS is transpiling them to CJS. – Alysaimport
/export
statements etc) in a file with an.mjs
extension, modern Node will treat it as ESM automatically. – Alysatype: "module"
andimport
for other libs, butp-limit
in particular has this issue regardless. I'm sure it has something to do with my project setup, but you know, this is supposed to be easy. Just let merequire
-_- – Predigestion