enhanced-resolve provides an async require.resolve-style API for resolving module or file requests according to Node.js resolving rules. It is highly configurable, supports sync, async, and promise APIs, and lets you create customized resolver functions with options like extensions, plugins, and filesystem behavior (including an optional cached filesystem).
Project status
- Actively maintained: GitHub pushes and updates are very recent, with the latest upstream push on 2026-07-06 and multiple patch/minor updates through June to early July 2026, indicating ongoing development rather than dormancy.
- Cadence appears steady: Several updates landed in short succession (for example, v5.23.0 (2026-06-05), v5.22.x (late May to June 03), and v5.24.0 to v5.24.2 (2026-06-11 to 2026-07-06)), suggesting an active, roughly weeks-to-months rhythm.
AI summary generated
Recent updates
v5.24.2
Release v5.24.2 implements a more efficient dispatch strategy for CachedInputFileSystem cache hits: callbacks triggered within the same synchronous burst are now batched into a single nextTick. The documented change focuses on reducing per-hit scheduling overhead while keeping callbacks asynchronous and ordered.
v5.24.1
v5.24.1 is a patch release focused on reducing hot-path allocations in the enhanced-resolve resolve pipeline. The code changes concentrate on ParsePlugin and Resolver internal fast paths, aiming to keep request object construction cheaper.
Breakingv5.24.0
v5.24.0 expands enhanced-resolve to accept `file:` URL instances for the `resolve` family arguments, converting them to filesystem paths like Node does. It also shifts the resolver to be runtime-agnostic, adding browser shims for `path`, `url`, and `graceful-fs` and decoding file contents without assuming a Node `Buffer`.
Featuresv5.23.0
v5.23.0 adds support for passing file URL instances in various path-like enhanced-resolve options by converting them to filesystem paths internally. The change is accompanied by updated TypeScript typings and a new test suite covering file: URL inputs across roots, modules, alias, restrictions, and tsconfig-related options.
Featuresv5.22.2
v5.22.2 implements the documented behavior change for `exports` resolution under `restrictions`: when a valid `exports` target is filtered out by restrictions, the resolver now falls back to the next `modules` entry instead of throwing. The implementation is done via an internal marker shared between `RestrictionsPlugin` and `ExportsFieldPlugin`, and new tests/fixtures were added to cover the fallback and marker non-leakage behavior.
v5.22.1
v5.22.1 is a patch release that fixes a security-relevant path traversal style issue where the `restrictions` feature could be bypassed using an in-root symlink pointing outside the configured restriction root. The fix is implemented in `SymlinkPlugin` and is covered by new tests for absolute and relative symlink cases.
BreakingSecurityv5.22.0
v5.22.0 extends `CachedInputFileSystem#purge` to support an optional `{ exact?: boolean }` argument, allowing callers to purge either prefix-matching entries (default) or only exact key matches (`exact: true`). The implementation also tightens how “no argument” is detected, changing purge behavior for certain falsy values and adding related test coverage.
Featuresv5.21.6
v5.21.6 focuses on performance improvements to alias resolution and tsconfig path resolution. It adds a hot-path optimization for alias matching by first character, and memoizes per-(tsconfigPathsMap, requestPath) context selection in TsconfigPathsPlugin.
v5.21.5
Release v5.21.5 is a patch update focused on TypeScript tsconfig path resolution behavior. It prevents the resolver from incorrectly adding the tsconfig directory (via baseUrl-derived paths) to module search paths when the tsconfig does not define baseUrl.
v5.21.4
This release updates enhanced-resolve's TsconfigPathsPlugin behavior when `tsconfig: true` is enabled. Instead of only checking for a `tsconfig.json` at the initial resolution directory, it now searches upward through parent directories to locate the nearest `tsconfig.json`, then uses its path mappings.
Breakingv5.21.3
v5.21.3 is a patch release focused on TsconfigPathsPlugin resolution behavior. It updates the resolver so that when a tsconfig `paths` pattern matches but the mapped file does not exist, resolution falls through to normal node_modules resolution (matching TypeScript).
v5.21.2
v5.21.2 is a patch release focused on TsconfigPathsPlugin correctness fixes (circular project references stack overflow, and extends resolution for unscoped npm packages), plus several resolver performance optimizations. The diff shows mostly internal hot-path refactors and cache/iteration reductions, with behavior changes concentrated in tsconfig extends and reference handling.
Featuresv5.21.1
v5.21.1 is a patch release focused on reducing allocations on hot resolution paths and fixing regressions around resolveContext.stack iteration and TsconfigPathsPlugin working with resolveSync + useSyncFileSystemCalls. The diff shows substantial internal refactors in resolver and field-processing logic to avoid regex/iterator overhead, plus a switch of JSONC reading to a callback style to preserve synchronous behavior.