Use module.exports export to detect CJS config #2461
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🤔 What's changed?
Node.js 23 introduced a
module.exports
export on the wrapper namespace for CommonJS modules whenimport
ed. The motivation for this seems to have mostly been around the new support for usingrequire()
to load ES modules in some circumstances. But a side effect is that it provides a heuristic as to whether what you imported is from CommonJS or ESM.This is useful for us in cases where we find a configuration file with a
.js
suffix and want to know whether it's CommonJS or ESM since we have to process it a little differently. Currently we useread-pkg-up
to check if the containing package hastype=module
but this is brittle, fussy and adds an extra dependency.This PR changes the config-loading code to check the for the
module.exports
instead, simplifying the code and jettisoning a dependency. Currently it only works on Node.js 23.x - as you can see from failing builds for other versions - but in future this could become viable. We'd then only be usingrequire()
where explicitly requested for loading support code, which is where we want to be.🏷️ What kind of change is this?
📋 Checklist: