Open SimpleCreations opened 2 months ago
This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 30 days.
Not stale
In node 23 the flag is enabled by default so require a pure ESM module is something allowed by default. Include this behavior in jest it will be very useful for projects can not be migrated to ESM
This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 30 days.
unstale
🚀 Feature Proposal
Allow using
require
for pure ESM packages. This can be either the default behavior, or enabled by reading the--experimental-require-module
Node option, or by having a setting in the config (e.g.allowEsmRequire: true
).Motivation
There's an experimental
--experimental-require-module
flag in Node 22 and 20.17 that allows using CJSrequire
for pure ESM packages. This is great for CJS projects that cannot migrate to ESM yet (e.g. NestJS projects), because they can use modern versions of pure ESM dependencies.I was able to make it work by adding
babel-jest
to the project and configuring it to apply@babel/plugin-transform-modules-commonjs
plugin to my specific pure ESM dependency. But of course it's more desirable that this works out of the box.Example
jest.config.mjs
package.json
index.js
index.spec.js
Running the code ✅
Running Jest ❌
Pitch
Jest includes its own module resolution system. Lack of ESM
require
makes it not on par with Node's module resolution system, meaning that even if I can make the runtime code work with native Node, I have include some sort of transformations to make it work with Jest.