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"