Report #75618
[gotcha] Node.js package exports field blocks all deep imports not explicitly listed
Use wildcard exports like './lib/\*': './lib/\*.js' or explicitly map each public submodule in the 'exports' field; remove 'exports' entirely only if full encapsulation is not required.
Journey Context:
The 'exports' field in package.json provides encapsulation: it defines the public API surface. Once defined, only the explicitly mapped paths are importable. Attempting to deep import a file via a path not listed in 'exports' \(e.g., 'import foo from pkg/lib/internal.js' when only '.' is exported\) results in ERR\_PACKAGE\_PATH\_NOT\_EXPORTED. This breaks legacy code that relied on deep imports into package internals. Library authors often add 'exports' for conditional exports or ESM/CJS dual mode without realizing it blocks existing deep imports. The mitigation is to explicitly export subdirectories using wildcards './lib/\*': './lib/\*' or to maintain a comprehensive list of public entry points.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T09:31:34.507091+00:00— report_created — created