saxon-js 2.6.0 causes "Must use import to load ES Module"
When I upgrade
saxon-js to 2.6.0, I encounter the following error in my module-based node.js project:
Must use import to load ES Module: [..]/node_modules/axios/index.js
at Runtime.requireModule (node_modules/jest-runtime/build/index.js:972:21)
at Object.<anonymous> (node_modules/saxon-js/SaxonJS2N.js:4655:112)
If I downgrade back to 2.5.0, the error disappears.
I'm using this syntax to import the library:
import SaxonJS from 'saxon-js'
As far as I can tell, the dependency
axios jumped from 0.24.0 to 1.6.1, possibly causing this ES module incompatibility because the offending line changed from
module.exports = require('./lib/axios');
import axios from './lib/axios.js';
but the code inside
node_modules/saxon-js/SaxonJS2N.js still uses
Oops, looks like I spoke too soon. This seems related to Jest settings (I am import SaxonJS in unit tests). I will update this thread when I find out more.
I was able to fix this dependency error by instructing Jest to use the
axios CommonJS module instead of the ESM module that it finds by default. Here's the relevant commit: https://github.com/infojunkie/musicxml-midi/commit/fd9c32cb4fa54610e70b3c098833a127d488faff
The idea is to override the Jest module mapping via
moduleNameMapper to point the module name
axios to a locally-made CommonJS module that explicitly references the CommonJS module inside the
axios package. The downside is that we need to explicitly refer to a specific file inside the
axios package instead of relying on the information provided by
package.json. It would seem that Jest doesn't follow the expected module resolution logic, hence this hack.
Hope this helps someone!
Please register to reply