diff --git a/packages/playground/optimize-deps/__tests__/optimize-deps.spec.ts b/packages/playground/optimize-deps/__tests__/optimize-deps.spec.ts index 0a37ffc9df36be..d683e64e9f2296 100644 --- a/packages/playground/optimize-deps/__tests__/optimize-deps.spec.ts +++ b/packages/playground/optimize-deps/__tests__/optimize-deps.spec.ts @@ -28,6 +28,18 @@ test('dynamic default import from webpacked cjs (clipboard)', async () => { expect(await page.textContent('.cjs-dynamic-clipboard')).toBe('ok') }) +test('dynamic default import from cjs (cjs-dynamic-dep-cjs-compiled-from-esm)', async () => { + expect(await page.textContent('.cjs-dynamic-dep-cjs-compiled-from-esm')).toBe( + 'ok' + ) +}) + +test('dynamic default import from cjs (cjs-dynamic-dep-cjs-compiled-from-cjs)', async () => { + expect(await page.textContent('.cjs-dynamic-dep-cjs-compiled-from-cjs')).toBe( + 'ok' + ) +}) + test('dedupe', async () => { expect(await page.textContent('.dedupe button')).toBe('count is 0') await page.click('.dedupe button') diff --git a/packages/playground/optimize-deps/cjs-dynamic.js b/packages/playground/optimize-deps/cjs-dynamic.js index 4d3856d8f69a92..91dc5a964d5481 100644 --- a/packages/playground/optimize-deps/cjs-dynamic.js +++ b/packages/playground/optimize-deps/cjs-dynamic.js @@ -16,6 +16,18 @@ text('.cjs-dynamic-phoenix', 'ok') } + const cjsFromESM = await import('dep-cjs-compiled-from-esm') + console.log('cjsFromESM', cjsFromESM) + if (typeof cjsFromESM.default === 'function') { + text('.cjs-dynamic-dep-cjs-compiled-from-esm', 'ok') + } + + const cjsFromCJS = await import('dep-cjs-compiled-from-cjs') + console.log('cjsFromCJS', cjsFromCJS) + if (typeof cjsFromCJS.default === 'function') { + text('.cjs-dynamic-dep-cjs-compiled-from-cjs', 'ok') + } + function App() { const [count, setCount] = useState(0) diff --git a/packages/playground/optimize-deps/dep-cjs-compiled-from-cjs/index.js b/packages/playground/optimize-deps/dep-cjs-compiled-from-cjs/index.js new file mode 100644 index 00000000000000..38d4c85c7c33ce --- /dev/null +++ b/packages/playground/optimize-deps/dep-cjs-compiled-from-cjs/index.js @@ -0,0 +1,5 @@ +'use strict' +function foo() { + return 'foo' +} +module.exports = foo diff --git a/packages/playground/optimize-deps/dep-cjs-compiled-from-cjs/package.json b/packages/playground/optimize-deps/dep-cjs-compiled-from-cjs/package.json new file mode 100644 index 00000000000000..c27c7b3b73cf91 --- /dev/null +++ b/packages/playground/optimize-deps/dep-cjs-compiled-from-cjs/package.json @@ -0,0 +1,5 @@ +{ + "name": "dep-cjs-compiled-from-cjs", + "version": "0.0.0", + "main": "index.js" +} diff --git a/packages/playground/optimize-deps/dep-cjs-compiled-from-esm/index.js b/packages/playground/optimize-deps/dep-cjs-compiled-from-esm/index.js new file mode 100644 index 00000000000000..ae3c4bd1b2fa50 --- /dev/null +++ b/packages/playground/optimize-deps/dep-cjs-compiled-from-esm/index.js @@ -0,0 +1,6 @@ +'use strict' +Object.defineProperty(exports, '__esModule', { value: true }) +function foo() { + return 'foo' +} +exports.default = foo diff --git a/packages/playground/optimize-deps/dep-cjs-compiled-from-esm/package.json b/packages/playground/optimize-deps/dep-cjs-compiled-from-esm/package.json new file mode 100644 index 00000000000000..cd016d330d1095 --- /dev/null +++ b/packages/playground/optimize-deps/dep-cjs-compiled-from-esm/package.json @@ -0,0 +1,5 @@ +{ + "name": "dep-cjs-compiled-from-esm", + "version": "0.0.0", + "main": "index.js" +} diff --git a/packages/playground/optimize-deps/index.html b/packages/playground/optimize-deps/index.html index dc0345e6a6f482..59b36a6c9c3466 100644 --- a/packages/playground/optimize-deps/index.html +++ b/packages/playground/optimize-deps/index.html @@ -15,6 +15,10 @@

CommonJS dynamic import named (phoenix)

CommonJS dynamic import default (clipboard)

+

CommonJS dynamic import default (dep-cjs-compiled-from-esm)

+
+

CommonJS dynamic import default (dep-cjs-compiled-from-cjs)

+
diff --git a/packages/playground/optimize-deps/package.json b/packages/playground/optimize-deps/package.json index a9644619d74994..74fc4248db94d1 100644 --- a/packages/playground/optimize-deps/package.json +++ b/packages/playground/optimize-deps/package.json @@ -11,10 +11,11 @@ "dependencies": { "axios": "^0.21.1", "clipboard": "^2.0.6", - "dep-cjs-named-only": "link:./dep-cjs-named-only", "dep-linked": "link:./dep-linked", "dep-linked-include": "link:./dep-linked-include", "dep-esbuild-plugin-transform": "link:./dep-esbuild-plugin-transform", + "dep-cjs-compiled-from-esm": "file:./dep-cjs-compiled-from-esm", + "dep-cjs-compiled-from-cjs": "file:./dep-cjs-compiled-from-cjs", "phoenix": "^1.5.7", "react": "^17.0.1", "react-dom": "^17.0.1", diff --git a/packages/vite/src/node/plugins/importAnalysis.ts b/packages/vite/src/node/plugins/importAnalysis.ts index 3b05f0ef55953e..b313f602b83074 100644 --- a/packages/vite/src/node/plugins/importAnalysis.ts +++ b/packages/vite/src/node/plugins/importAnalysis.ts @@ -377,7 +377,7 @@ export function importAnalysisPlugin(config: ResolvedConfig): Plugin { str().overwrite( dynamicIndex, end + 1, - `import('${url}').then(m => ({ ...m.default, default: m.default }))` + `import('${url}').then(m => m.default && m.default.__esModule ? m.default : ({ ...m.default, default: m.default }))` ) } else { const exp = source.slice(expStart, expEnd) diff --git a/yarn.lock b/yarn.lock index 06456012fcad35..f8468efb072a40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2637,7 +2637,8 @@ css-color-names@^1.0.1: integrity sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA== "css-dep@link:./packages/playground/css/css-dep": - version "1.0.0" + version "0.0.0" + uid "" css-parse@~2.0.0: version "2.0.0" @@ -2821,24 +2822,27 @@ delegate@^3.1.2: resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== -"dep-cjs-named-only@link:./packages/playground/optimize-deps/dep-cjs-named-only": +"dep-cjs-compiled-from-cjs@file:./packages/playground/optimize-deps/dep-cjs-compiled-from-cjs": + version "0.0.0" + +"dep-cjs-compiled-from-esm@file:./packages/playground/optimize-deps/dep-cjs-compiled-from-esm": version "0.0.0" "dep-esbuild-plugin-transform@link:./packages/playground/optimize-deps/dep-esbuild-plugin-transform": version "0.0.0" + uid "" "dep-import-type@link:./packages/playground/ssr-vue/dep-import-type": version "0.0.0" + uid "" "dep-linked-include@link:./packages/playground/optimize-deps/dep-linked-include": version "0.0.0" - dependencies: - react "17.0.0" + uid "" "dep-linked@link:./packages/playground/optimize-deps/dep-linked": version "0.0.0" - dependencies: - lodash-es "^4.17.20" + uid "" depd@~1.1.2: version "1.1.2" @@ -6556,13 +6560,16 @@ requires-port@^1.0.0: integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= "resolve-browser-field@link:./packages/playground/resolve/browser-field": - version "1.0.0" + version "0.0.0" + uid "" "resolve-custom-condition@link:./packages/playground/resolve/custom-condition": - version "1.0.0" + version "0.0.0" + uid "" "resolve-custom-main-field@link:./packages/playground/resolve/custom-main-field": - version "1.0.0" + version "0.0.0" + uid "" resolve-cwd@^3.0.0: version "3.0.0" @@ -6572,10 +6579,12 @@ resolve-cwd@^3.0.0: resolve-from "^5.0.0" "resolve-exports-env@link:./packages/playground/resolve/exports-env": - version "1.0.0" + version "0.0.0" + uid "" "resolve-exports-path@link:./packages/playground/resolve/exports-path": - version "1.0.0" + version "0.0.0" + uid "" resolve-from@^4.0.0: version "4.0.0" @@ -7317,13 +7326,16 @@ test-exclude@^6.0.0: minimatch "^3.0.4" "test-package-a@link:./packages/playground/nested-deps/test-package-a": - version "2.0.0" + version "0.0.0" + uid "" "test-package-b@link:./packages/playground/nested-deps/test-package-b": - version "1.0.0" + version "0.0.0" + uid "" "test-package-c@link:./packages/playground/nested-deps/test-package-c": - version "1.0.0" + version "0.0.0" + uid "" text-extensions@^1.0.0: version "1.9.0" @@ -7577,6 +7589,7 @@ typedarray-to-buffer@^3.1.5: "types@link:./packages/vite/types": version "0.0.0" + uid "" typescript@^4.3.5, typescript@~4.3.5: version "4.3.5"