Open dhurlburtusa opened 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?
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.
+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
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
When updating
jsonld
from 5.2.0 to 6.0.0, we started getting the following error when running our tests: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.