Skip to content

Commit 5c7a4b3

Browse files
committed
fix: disable lazy barrel in bundled dev
1 parent 869e8ea commit 5c7a4b3

7 files changed

Lines changed: 112 additions & 0 deletions

File tree

packages/vite/src/node/server/bundledDev.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,9 @@ export class BundledDev {
353353
this.environment.getTopLevelConfig(),
354354
),
355355
}
356+
// disable lazy barrel optimization due to a bug in Rolldown dev mode
357+
// https://github.com/vitejs/vite/issues/22749
358+
rolldownOptions.experimental.lazyBarrel = false
356359

357360
// disable inlineConst optimization due to a bug in Rolldown
358361
// https://github.com/vitejs/vite/issues/21843
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { expect, test } from 'vitest'
2+
import { isBuild, page } from '~utils'
3+
4+
if (isBuild) {
5+
test('should render', async () => {
6+
await expect.poll(() => page.textContent('.app')).toBe('hello')
7+
await expect
8+
.poll(() => page.textContent('.date-fns-locale'))
9+
.toBe('czerwca')
10+
})
11+
} else {
12+
test('bundles locale barrel imports', async () => {
13+
const reloadPromise = page.waitForEvent('load')
14+
await expect
15+
.poll(() => page.textContent('body'))
16+
.toContain('Bundling in progress')
17+
await reloadPromise
18+
await expect.poll(() => page.textContent('.app')).toBe('hello')
19+
await expect
20+
.poll(() => page.textContent('.date-fns-locale'))
21+
.toBe('czerwca')
22+
})
23+
}

playground/bundled-dev/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<div class="app"></div>
2+
<div class="date-fns-locale"></div>
3+
4+
<script type="module" src="./main.js"></script>

playground/bundled-dev/main.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { format } from 'date-fns'
2+
import { pl } from 'date-fns/locale'
3+
4+
text('.app', 'hello')
5+
text('.date-fns-locale', format(new Date(2020, 5, 1), 'MMMM', { locale: pl }))
6+
7+
function text(el, text) {
8+
document.querySelector(el).textContent = text
9+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "@vitejs/test-bundled-dev",
3+
"private": true,
4+
"version": "0.0.0",
5+
"type": "module",
6+
"dependencies": {
7+
"date-fns": "4.1.0"
8+
},
9+
"scripts": {
10+
"dev": "vite",
11+
"build": "vite build",
12+
"preview": "vite preview"
13+
}
14+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { type Plugin, defineConfig } from 'vite'
2+
3+
export default defineConfig({
4+
experimental: {
5+
bundledDev: true,
6+
},
7+
plugins: [waitBundleCompleteUntilAccess()],
8+
})
9+
10+
function waitBundleCompleteUntilAccess(): Plugin {
11+
let resolvers: PromiseWithResolvers<void>
12+
13+
return {
14+
name: 'wait-bundle-complete-until-access',
15+
apply: 'serve',
16+
configureServer(server) {
17+
let accessCount = 0
18+
resolvers = promiseWithResolvers()
19+
20+
server.middlewares.use((_req, _res, next) => {
21+
accessCount++
22+
if (accessCount === 1) {
23+
resolvers.resolve()
24+
}
25+
next()
26+
})
27+
},
28+
async generateBundle() {
29+
await resolvers.promise
30+
},
31+
}
32+
}
33+
34+
interface PromiseWithResolvers<T> {
35+
promise: Promise<T>
36+
resolve: (value: T | PromiseLike<T>) => void
37+
reject: (reason?: any) => void
38+
}
39+
40+
function promiseWithResolvers<T>(): PromiseWithResolvers<T> {
41+
let resolve: any
42+
let reject: any
43+
const promise = new Promise<T>((_resolve, _reject) => {
44+
resolve = _resolve
45+
reject = _reject
46+
})
47+
return { promise, resolve, reject }
48+
}

pnpm-lock.yaml

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)