Repro: clone https://github.com/ljharb/has-package-exports
It has a dev dep of "has-package-exports": "file:.", so that in every node version, i can require('has-package-exports') from within the package, and it works.
In node v13.6 and v12.15, node test passes without issuing (node:96292) ExperimentalWarning: Package name self resolution is an experimental feature. This feature could change at any time as a warning.
In node v13.7, the warning is correctly issued, and the local dev dep is byassed.
However, in node v12.16, without passing any flags, the warning is issued and the local dev dep is bypassed. v12.16 and v12.15 should behave identically with respect to this feature, regardless of the presence of "exports" in package.json.
cc @nodejs/modules-active-members
This is definitely a bug, unfortunately due to the nature of the backporting process between the flagged and unflagged implementations. The fix would be to include an explicit if (!experimentalModules) return in the first line of the trySelf function in lib/internal/modules/cjs/loader.js for the 12.x branch.
we can get out an emergency release to fix this
Looks like this was resolved in https://github.com/nodejs/node/commit/f0b2d875d96d942d6d22612986dceb225317fede, and may be released in https://github.com/nodejs/node/pull/31781
Most helpful comment
we can get out an emergency release to fix this