diff --git a/fixtures/enhanced_resolve/test/fixtures/browser-module/package.json b/fixtures/enhanced_resolve/test/fixtures/browser-module/package.json index c5704ce2..c761e9a0 100644 --- a/fixtures/enhanced_resolve/test/fixtures/browser-module/package.json +++ b/fixtures/enhanced_resolve/test/fixtures/browser-module/package.json @@ -6,6 +6,7 @@ "module-b": "module-c", "module-c": "module-c", "./toString": "./lib/toString.js", + "./lib/main.js": "./lib/main.js", ".": false }, "innerBrowser1": { diff --git a/src/lib.rs b/src/lib.rs index 4cf48c30..056a60e4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -788,6 +788,12 @@ impl ResolverGeneric { let Some(new_specifier) = package_json.resolve_browser_field(path, specifier)? else { return Ok(None); }; + // Finish when resolving to self `{"./a.js": "./a.js"}` + if let Some(new_specifier) = new_specifier.strip_prefix("./") { + if path.ends_with(Path::new(new_specifier)) { + return Ok(Some(cached_path.clone())); + } + } if specifier.is_some_and(|s| s == new_specifier) { return Ok(None); } diff --git a/src/tests/browser_field.rs b/src/tests/browser_field.rs index 4fd91617..a73182d0 100644 --- a/src/tests/browser_field.rs +++ b/src/tests/browser_field.rs @@ -61,6 +61,7 @@ fn replace_file() { ("should check only alias field properties", f.clone(), "./toString", f.join("lib/toString.js")), // not part of enhanced-resolve ("recursion", f.clone(), "module-c", f.join("node_modules/module-c.js")), + ("resolve self", f.clone(), "./lib/main.js", f.join("lib/main.js")), ]; for (comment, path, request, expected) in data {