digitalbazaar / http-client

An opinionated, isomorphic HTTP client.
BSD 3-Clause "New" or "Revised" License
2 stars 7 forks source link

Error: Cannot find module 'node:process'; Only supports 14.18.0 or newer #28

Open dhurlburtusa opened 2 years ago

dhurlburtusa commented 2 years ago

When updating jsonld from 5.2.0 to 6.0.0, we started getting the following error when running our tests:

Error: Jest: Got error running globalSetup - C:\repos\project\jest.setup.js, reason: Cannot find module 'node:process'
Require stack:
- C:\repos\project\node_modules\@digitalbazaar\http-client\dist\cjs\index.cjs        
- C:\repos\project\node_modules\jsonld\lib\documentLoaders\node.js
- C:\repos\project\node_modules\jsonld\lib\platform.js
- C:\repos\project\node_modules\jsonld\lib\jsonld.js
- C:\repos\project\node_modules\jsonld\lib\index.js
...

This happened when using Node 14.16.1.

Apparently Node didn't start supporting the node: prefix syntax until v16.0.0 and 14.18.0. See the history section at https://nodejs.org/dist/latest-v18.x/docs/api/modules.html#core-modules.

The GitHub actions for this project are being run with 14.19.2 according to https://github.com/digitalbazaar/http-client/runs/6513550578 and newer runs.

So, the project really only supports v14.18.0 or above; not 14.x.

I think removing the node: prefix would then allow all versions of node v14 to be supported, unless there is something else incompatible too.

davidlehn commented 2 years ago

Yeah, we have been pushing to the future a bit more aggressively lately. And that can break some use cases. The theory was that most people can, and do, update the minor and patch releases of Node.js often to pull in bug fixes, security fixes, and updates of things like this.

We can revert that change if needed as a temporary measure. Updating the engines field would help too, but that's not going to solve the issue. It does seem easiest to just target the latest supported Node.js versions. We're soon going to do more aggressive updates to JSON-LD related libraries and I imagine more new features may get used.

Out of curiosity, what kind of situation makes it difficult to update Node.js itself? Is there a wide spread reason to target a specific older release?

dhurlburtusa commented 2 years ago

We can update out GitHub Actions workflow to use a newer version of node 14.18.0 or newer. That will fix the node: prefix issue. But when we use node 14.18.0 or newer, a new bug appears. It has to due with Jest not liking the dynamic import statement that is used to asynchronously import ky-universal (see https://github.com/digitalbazaar/http-client/blob/main/lib/httpClient.js#L6). Jest complains with: You need to run with a version of node that supports ES Modules in the VM API. See https://jestjs.io/docs/ecmascript-modules. I tried running with the --experimental-vm-modules flag. It gets rid of the Jest/ESM errors but a new error shows for our tests:

Test environment has been torn down

      at invariant (node_modules/jest-runtime/build/index.js:2591:11)
      at Object.<anonymous> (node_modules/jsonld/node_modules/@digitalbazaar/http-client/dist/cjs/index.cjs:64:27)
      at Object.<anonymous> (node_modules/jsonld/lib/documentLoaders/node.js:12:22)

The number of tests that fails varies between runs. I suspect that some tests finish running before this asynchronous call (i.e., the dynamic import) is finished. When the async call resolves, Jest sees after the tests have finished. This is just a guess on what's going on. I haven't logged this issue because I'm still investigating.

adlerfaulkner commented 2 years ago

+1 on the follow up issue from @dhurlburtusa. I am also getting

You need to run with a version of node that supports ES Modules in the VM API. See https://jestjs.io/docs/ecmascript-modules

when I run my jest tests which test code which uses jsonld. The trace shows that it comes from the import of ky-universal in this package. Unlike @dhurlburtusa, my first test always fails with this error, all other tests pass.

Node version: 16.15.0 jsonld version: 6.0.0

adlerfaulkner commented 2 years ago

Downgrading to jsonld version 5.2.0 fixes it.

The 6.0.0 update to jsonld upgraded @digitalbazaar/http-client from ^1.1.0 to ^3.2.0