diff --git a/packages/vite/src/node/plugins/resolve.ts b/packages/vite/src/node/plugins/resolve.ts index e0297fea18e782..f1878e89d17433 100644 --- a/packages/vite/src/node/plugins/resolve.ts +++ b/packages/vite/src/node/plugins/resolve.ts @@ -867,6 +867,8 @@ export function resolvePackageEntry( ) { // likely UMD or CJS(!!! e.g. firebase 7.x), prefer module entryPoint = data.module + } else { + entryPoint = browserEntry } } } else { diff --git a/playground/resolve/__tests__/resolve.spec.ts b/playground/resolve/__tests__/resolve.spec.ts index e95e6d78c409c5..ef125d4409ec9b 100644 --- a/playground/resolve/__tests__/resolve.spec.ts +++ b/playground/resolve/__tests__/resolve.spec.ts @@ -87,6 +87,14 @@ test('browser field', async () => { expect(await page.textContent('.browser')).toMatch('[success]') }) +test('Resolve browser field even if module field exists', async () => { + expect(await page.textContent('.browser-module1')).toMatch('[success]') +}) + +test('Resolve module field if browser field is likely UMD or CJS', async () => { + expect(await page.textContent('.browser-module2')).toMatch('[success]') +}) + test('css entry', async () => { expect(await page.textContent('.css')).toMatch('[success]') }) diff --git a/playground/resolve/browser-module-field1/index.js b/playground/resolve/browser-module-field1/index.js new file mode 100644 index 00000000000000..ce45a76e78514d --- /dev/null +++ b/playground/resolve/browser-module-field1/index.js @@ -0,0 +1 @@ +export default '[fail] this should not run in the browser' diff --git a/playground/resolve/browser-module-field1/index.web.js b/playground/resolve/browser-module-field1/index.web.js new file mode 100644 index 00000000000000..99af62f8e3700e --- /dev/null +++ b/playground/resolve/browser-module-field1/index.web.js @@ -0,0 +1 @@ +export default '[success] this should run in browser' diff --git a/playground/resolve/browser-module-field1/package.json b/playground/resolve/browser-module-field1/package.json new file mode 100644 index 00000000000000..b9186cf67fc560 --- /dev/null +++ b/playground/resolve/browser-module-field1/package.json @@ -0,0 +1,8 @@ +{ + "name": "resolve-browser-module-field1", + "private": true, + "version": "1.0.0", + "//": "real world example: https://github.com/aws/aws-sdk-js-v3/blob/59cdfd81452bce16bb26d07668e5550ed05d9d06/packages/credential-providers/package.json#L6-L7", + "module": "index.js", + "browser": "index.web.js" +} diff --git a/playground/resolve/browser-module-field2/index.js b/playground/resolve/browser-module-field2/index.js new file mode 100644 index 00000000000000..99af62f8e3700e --- /dev/null +++ b/playground/resolve/browser-module-field2/index.js @@ -0,0 +1 @@ +export default '[success] this should run in browser' diff --git a/playground/resolve/browser-module-field2/index.web.js b/playground/resolve/browser-module-field2/index.web.js new file mode 100644 index 00000000000000..172aa9928c86ae --- /dev/null +++ b/playground/resolve/browser-module-field2/index.web.js @@ -0,0 +1 @@ +module.exports = '[fail] this should not run in the browser' diff --git a/playground/resolve/browser-module-field2/package.json b/playground/resolve/browser-module-field2/package.json new file mode 100644 index 00000000000000..ca43d33ff9a6f6 --- /dev/null +++ b/playground/resolve/browser-module-field2/package.json @@ -0,0 +1,7 @@ +{ + "name": "resolve-browser-module-field2", + "private": true, + "version": "1.0.0", + "module": "index.js", + "browser": "index.web.js" +} diff --git a/playground/resolve/index.html b/playground/resolve/index.html index 674819fc0195a6..7502c422e0eb82 100644 --- a/playground/resolve/index.html +++ b/playground/resolve/index.html @@ -76,6 +76,12 @@
fail
+fail
+ +fail
+fail
@@ -213,6 +219,12 @@