From 2f309783d57805c19faaf27a0c82111129e8cd71 Mon Sep 17 00:00:00 2001 From: "Fred K. Schott" Date: Mon, 22 Jun 2020 10:43:17 -0700 Subject: [PATCH] Fix regression where main was ignored on browser object packages (#528) * fix regression where main was ignored on browser object packages * fix test output * fix test output --- src/commands/install.ts | 7 +++++-- .../expected-install/import-map.json | 3 ++- .../{mock-test-package.js => package-has-valid.js} | 0 .../expected-install/package-no-valid.js | 3 +++ .../dep-browser-entrypoint-object/expected-output.txt | 3 ++- .../entrypoint.js | 0 .../{mock-test-package => package-has-valid}/package.json | 2 +- .../node_modules/package-no-valid/entrypoint.js | 1 + .../node_modules/package-no-valid/package.json | 8 ++++++++ .../dep-browser-entrypoint-object/package.json | 7 ++++--- 10 files changed, 26 insertions(+), 8 deletions(-) rename test/integration/dep-browser-entrypoint-object/expected-install/{mock-test-package.js => package-has-valid.js} (100%) create mode 100644 test/integration/dep-browser-entrypoint-object/expected-install/package-no-valid.js rename test/integration/dep-browser-entrypoint-object/node_modules/{mock-test-package => package-has-valid}/entrypoint.js (100%) rename test/integration/dep-browser-entrypoint-object/node_modules/{mock-test-package => package-has-valid}/package.json (76%) create mode 100644 test/integration/dep-browser-entrypoint-object/node_modules/package-no-valid/entrypoint.js create mode 100644 test/integration/dep-browser-entrypoint-object/node_modules/package-no-valid/package.json diff --git a/src/commands/install.ts b/src/commands/install.ts index 09f004954a..0eb0c17848 100644 --- a/src/commands/install.ts +++ b/src/commands/install.ts @@ -178,8 +178,7 @@ function resolveWebDependency(dep: string): DependencyLoc { depManifest['browser:module'] || depManifest.module || depManifest['main:esnext'] || - depManifest.browser || - depManifest.main; + depManifest.browser; // Some packages define "browser" as an object. We'll do our best to find the // right entrypoint in an entrypoint object, or fail otherwise. // See: https://github.com/defunctzombie/package-browser-field-spec @@ -191,6 +190,10 @@ function resolveWebDependency(dep: string): DependencyLoc { foundEntrypoint['./'] || foundEntrypoint['.']; } + // If browser object is set but no relevant entrypoint is found, fall back to "main". + if (!foundEntrypoint) { + foundEntrypoint = depManifest.main; + } // Sometimes packages don't give an entrypoint, assuming you'll fall back to "index.js". const isImplicitEntrypoint = !foundEntrypoint; if (isImplicitEntrypoint) { diff --git a/test/integration/dep-browser-entrypoint-object/expected-install/import-map.json b/test/integration/dep-browser-entrypoint-object/expected-install/import-map.json index e923183023..2b3fd9ec14 100644 --- a/test/integration/dep-browser-entrypoint-object/expected-install/import-map.json +++ b/test/integration/dep-browser-entrypoint-object/expected-install/import-map.json @@ -1,5 +1,6 @@ { "imports": { - "mock-test-package": "./mock-test-package.js" + "package-has-valid": "./package-has-valid.js", + "package-no-valid": "./package-no-valid.js" } } \ No newline at end of file diff --git a/test/integration/dep-browser-entrypoint-object/expected-install/mock-test-package.js b/test/integration/dep-browser-entrypoint-object/expected-install/package-has-valid.js similarity index 100% rename from test/integration/dep-browser-entrypoint-object/expected-install/mock-test-package.js rename to test/integration/dep-browser-entrypoint-object/expected-install/package-has-valid.js diff --git a/test/integration/dep-browser-entrypoint-object/expected-install/package-no-valid.js b/test/integration/dep-browser-entrypoint-object/expected-install/package-no-valid.js new file mode 100644 index 0000000000..a747cd8325 --- /dev/null +++ b/test/integration/dep-browser-entrypoint-object/expected-install/package-no-valid.js @@ -0,0 +1,3 @@ +const foobar = 42; + +export { foobar }; diff --git a/test/integration/dep-browser-entrypoint-object/expected-output.txt b/test/integration/dep-browser-entrypoint-object/expected-output.txt index f2e69900ec..6a033e51c7 100644 --- a/test/integration/dep-browser-entrypoint-object/expected-output.txt +++ b/test/integration/dep-browser-entrypoint-object/expected-output.txt @@ -1,4 +1,5 @@ - snowpack installing... ✔ snowpack install complete. ⦿ web_modules/ size gzip brotli - └─ mock-test-package.js XXXX KB XXXX KB XXXX KB \ No newline at end of file + ├─ package-has-valid.js XXXX KB XXXX KB XXXX KB + └─ package-no-valid.js XXXX KB XXXX KB XXXX KB \ No newline at end of file diff --git a/test/integration/dep-browser-entrypoint-object/node_modules/mock-test-package/entrypoint.js b/test/integration/dep-browser-entrypoint-object/node_modules/package-has-valid/entrypoint.js similarity index 100% rename from test/integration/dep-browser-entrypoint-object/node_modules/mock-test-package/entrypoint.js rename to test/integration/dep-browser-entrypoint-object/node_modules/package-has-valid/entrypoint.js diff --git a/test/integration/dep-browser-entrypoint-object/node_modules/mock-test-package/package.json b/test/integration/dep-browser-entrypoint-object/node_modules/package-has-valid/package.json similarity index 76% rename from test/integration/dep-browser-entrypoint-object/node_modules/mock-test-package/package.json rename to test/integration/dep-browser-entrypoint-object/node_modules/package-has-valid/package.json index a5ec003f70..364ceb24b7 100644 --- a/test/integration/dep-browser-entrypoint-object/node_modules/mock-test-package/package.json +++ b/test/integration/dep-browser-entrypoint-object/node_modules/package-has-valid/package.json @@ -1,5 +1,5 @@ { - "name": "mock-test-package", + "name": "package-has-valid", "version": "1.2.3", "browser": { "./index.js": "entrypoint.js", diff --git a/test/integration/dep-browser-entrypoint-object/node_modules/package-no-valid/entrypoint.js b/test/integration/dep-browser-entrypoint-object/node_modules/package-no-valid/entrypoint.js new file mode 100644 index 0000000000..b9a8670922 --- /dev/null +++ b/test/integration/dep-browser-entrypoint-object/node_modules/package-no-valid/entrypoint.js @@ -0,0 +1 @@ +export const foobar = 42; \ No newline at end of file diff --git a/test/integration/dep-browser-entrypoint-object/node_modules/package-no-valid/package.json b/test/integration/dep-browser-entrypoint-object/node_modules/package-no-valid/package.json new file mode 100644 index 0000000000..f153f562b0 --- /dev/null +++ b/test/integration/dep-browser-entrypoint-object/node_modules/package-no-valid/package.json @@ -0,0 +1,8 @@ +{ + "name": "package-no-valid", + "version": "1.2.3", + "main": "entrypoint.js", + "browser": { + "./bad": "bad" + } +} \ No newline at end of file diff --git a/test/integration/dep-browser-entrypoint-object/package.json b/test/integration/dep-browser-entrypoint-object/package.json index 5a861bb738..be09fa4696 100644 --- a/test/integration/dep-browser-entrypoint-object/package.json +++ b/test/integration/dep-browser-entrypoint-object/package.json @@ -1,12 +1,13 @@ { - "description": "Test that we can handle a package.json 'browser' object entrypoint", + "description": "Test that we properly handle a package.json 'browser' object.", "scripts": { "TEST": "node ../../../pkg/dist-node/index.bin.js" }, "snowpack": { - "install": ["mock-test-package"] + "install": ["package-has-valid", "package-no-valid"] }, "dependencies": { - "mock-test-package": "^1.2.3" + "package-has-valid": "^1.2.3", + "package-no-valid": "^1.2.3" } }