Elderjs / elderjs

Elder.js is an opinionated static site generator and web framework for Svelte built with SEO in mind.
https://elderguide.com/tech/elderjs/
MIT License
2.11k stars 52 forks source link

Using latest version of node-fetch is not supported #216

Open douglasward opened 2 years ago

douglasward commented 2 years ago

Using the latest version of node-fetch (3.0.0) causes the following error when requiring it in a route.js file for example:

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/douglas/projects/go-elderjs/node_modules/node-fetch/src/index.js
require() of ES modules is not supported.
require() of /Users/douglas/projects/go-elderjs/node_modules/node-fetch/src/index.js from /Users/douglas/projects/go-elderjs/src/routes/events/route.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 /Users/douglas/projects/go-elderjs/node_modules/node-fetch/package.json.

    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1089:13)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Module.require (internal/modules/cjs/loader.js:961:19)
    at require (internal/modules/cjs/helpers.js:92:18)
    at Object.<anonymous> (/Users/douglas/projects/go-elderjs/src/routes/events/route.js:1:15)
    at Module._compile (internal/modules/cjs/loader.js:1072:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12) {
  code: 'ERR_REQUIRE_ESM'
}

Downloading to 2.6.5 "fixes" the error.

nickreese commented 2 years ago

@douglasward Elder.js is written in cjs and what this error is saying is that it can't be required it has to be imported.

Not possible with Elder.js current structure. Open to a PR to help resolve it, but currently don't have a business case for needing to upgrade to esm yet. In fact one of the core packages we rely on doesn't support esm yet so we'll have to wait a bit longer.

douglasward commented 2 years ago

Thanks @nickreese. Do you think it would be worth noting this in the documentation? It references node-fetch a few times. https://elderguide.com/tech/elderjs/#fetching-external-data.

I wanted to make a pull request, but I couldn't find a repo with the documentation checked into it

nickreese commented 2 years ago

Here is the location to edit. Thank you for the PR: https://github.com/Elderjs/docs/blob/master/elderguide.com/elderjs.md