diff --git a/.gitignore b/.gitignore index 1cff349cc02..e8b6cc0423d 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,5 @@ bin esbuild.exe node_modules/ +.idea/ +.vscode/ \ No newline at end of file diff --git a/internal/bundler/bundler_default_test.go b/internal/bundler/bundler_default_test.go index eed4787959a..e04018232e2 100644 --- a/internal/bundler/bundler_default_test.go +++ b/internal/bundler/bundler_default_test.go @@ -1389,6 +1389,48 @@ NOTE: The package "fs" wasn't found on the file system but is built into node. A }) } +func TestSubImportModuleWithPkgBrowser(t *testing.T) { + default_suite.expectBundled(t, bundled{ + files: map[string]string{ + "/entry.js": ` + import { v } from "pkg/sub"; + console.log(v); + `, + "/node_modules/pkg/package.json": `{ "browser": { "./sub": "./sub/index.js" } }`, + "/node_modules/pkg/sub/index.js": ` + export { version as v } from "sub"; + `, + "/node_modules/sub/index.js": `export const version = 123`, + }, + entryPaths: []string{"/entry.js"}, + options: config.Options{ + Mode: config.ModeBundle, + AbsOutputFile: "/out.js", + }, + }) +} + +func TestSubImportModulePkgBrowser(t *testing.T) { + default_suite.expectBundled(t, bundled{ + files: map[string]string{ + "/entry.js": ` + import { v } from "pkg/sub"; + console.log(v); + `, + "/node_modules/pkg/package.json": `{ "browser": { "./sub": "./sub/index.js" } }`, + "/node_modules/pkg/sub/index.js": ` + export { version as v } from "sub2"; + `, + "/node_modules/sub2/index.js": `export const version = 123`, + }, + entryPaths: []string{"/entry.js"}, + options: config.Options{ + Mode: config.ModeBundle, + AbsOutputFile: "/out.js", + }, + }) +} + func TestImportFSNodeCommonJS(t *testing.T) { default_suite.expectBundled(t, bundled{ files: map[string]string{ diff --git a/internal/bundler/snapshots/snapshots_default.txt b/internal/bundler/snapshots/snapshots_default.txt index 5ed6ae7bbb9..e521c01c39b 100644 --- a/internal/bundler/snapshots/snapshots_default.txt +++ b/internal/bundler/snapshots/snapshots_default.txt @@ -2558,6 +2558,24 @@ TestRequireFSNodeMinify ---------- /out.js ---------- return require("fs"); +================================================================================ +TestSubImportModuleWithPkgBrowser +---------- /out.js ---------- +// node_modules/sub/index.js +var version = 123; + +// entry.js +console.log(version); + +================================================================================ +TestSubImportModulePkgBrowser +---------- /out.js ---------- +// node_modules/sub2/index.js +var version = 123; + +// entry.js +console.log(version); + ================================================================================ TestRequireJson ---------- /out.js ---------- diff --git a/internal/resolver/package_json.go b/internal/resolver/package_json.go index 47e1bbf400f..feb9356f697 100644 --- a/internal/resolver/package_json.go +++ b/internal/resolver/package_json.go @@ -197,7 +197,7 @@ func (r resolverQuery) checkBrowserMap(resolveDirInfo *dirInfo, inputPath string } } if isInSamePackage { - checkPath("./" + inputPath) + checkPath(inputPath) } } } diff --git a/scripts/end-to-end-tests.js b/scripts/end-to-end-tests.js index 12ba0b9672f..44817e8a038 100644 --- a/scripts/end-to-end-tests.js +++ b/scripts/end-to-end-tests.js @@ -324,6 +324,17 @@ 'node_modules/pkg/package.json': `{ "browser": { "./pkg2": "./file" } }`, 'node_modules/pkg/file.js': `var works = true`, }), + test(['entry.js', '--bundle', '--outfile=node.js'], { + 'entry.js': ` + import { v } from "pkg/sub" + console.log(v) + `, + 'node_modules/pkg/package.json': `{ "browser": { "./sub": "./sub/index.js" } }`, + 'node_modules/pkg/sub/index.js': ` + export { version as v } from "sub"; + `, + 'node_modules/sub/index.js': `export const version = 123`, + }), ) // Test arbitrary module namespace identifier names