Conversation
|
/ecosystem-ci run |
@vitejs/plugin-legacy
vite
commit: |
This comment was marked as outdated.
This comment was marked as outdated.
|
/ecosystem-ci run |
This comment was marked as outdated.
This comment was marked as outdated.
|
/ecosystem-ci run |
This comment was marked as outdated.
This comment was marked as outdated.
|
/ecosystem-ci run |
This comment was marked as outdated.
This comment was marked as outdated.
ddf07a2 to
fcc0e47
Compare
|
/ecosystem-ci run |
|
📝 Ran ecosystem CI on
✅ nuxt, qwik, quasar, storybook, sveltekit, vite-environment-examples, unocss, vite-plugin-pwa, vite-plugin-react, waku, vite-plugin-cloudflare, vite-plugin-vue, vite-plugin-rsc, vitepress, vuepress, vite-setup-catalogue |
Rolldown 1.0.0-rc.13 Upgrade Impact on TanStack Start (Vite Ecosystem CI)OverviewThis document analyzes the build output differences introduced by the Rolldown upgrade from Build Output Summary
Key Structural Differences1. Code Splitting Strategyrc.12 bundles most route definitions and rendering logic into rc.13 splits aggressively. 2. Modules Extracted in rc.13The following modules are inlined in rc.12's
On the server side, rc.13 additionally extracts:
3. Per-Route Chunk Count Increase
4. Identical Files (Same Content Hash)17 client-side files are byte-for-byte identical across both builds:
7 server-side files are also identical. 5. Content-Identical but Hash-Different FilesMany leaf components (e.g., Root Cause of the CI FailureThe Failing Testtest('malformed path params should return not found on router link', async ({ page, baseURL }) => {
await page.goto('/specialChars/malformed')
await page.waitForURL(`${baseURL}/specialChars/malformed`)
const link = page.getByTestId('special-malformed-path-link')
await link.click()
await page.waitForLoadState('load')
await expect(
page.getByTestId('default-not-found-component'),
).toBeInViewport() // ← times out after 5000ms
})Expected Client-Side Flow (When Hydrated)
This flow is functionally identical in both builds — all the relevant code ( Why rc.13 Fails on CIThe issue is a hydration race condition caused by the increased number of modules. The test does not wait for hydration before clicking the link — it only waits for URL match via rc.12 (passes):
rc.13 (fails):
Why It Passes LocallyLocal machines have significantly more resources (faster CPU, disk I/O, no resource contention). Even with 51 modules, hydration completes before Playwright issues the click. ConclusionThis is not a functional bug in Rolldown. The core application logic is identical between both builds — all relevant code shares the same content hash. The failure is caused by a change in code splitting heuristics in rc.13, which produces significantly more chunks (122 vs 87 client assets, 51 vs 20 modulepreloads). On resource-constrained CI environments, this increases hydration time enough that the Playwright test clicks the link before hydration completes, changing the execution path from client-side routing to native browser navigation and exceeding the test's timeout. Possible SolutionsOn the Rolldown sideThe more aggressive code splitting in rc.13 is likely caused by the On the TanStack Start sideAdd an explicit hydration wait before interacting with the page. The current test clicks the link immediately after await page.goto('/specialChars/malformed')
await page.waitForURL(`${baseURL}/specialChars/malformed`)
+ // Wait for hydration before clicking
+ await page.waitForFunction(() => {
+ const el = document.querySelector('[data-testid="special-malformed-path-link"]')
+ // After hydration, Solid attaches a click handler via event delegation
+ return el !== null && document.body.$$DELEGATES?.has('click')
+ })
const link = page.getByTestId('special-malformed-path-link')
await link.click()This makes the test resilient to varying chunk counts and CI performance, regardless of the bundler version. |
fcc0e47 to
e68a65c
Compare
See https://github.com/rolldown/rolldown/releases/tag/v1.0.0-rc.13
The cause of the CI error in the Vite ecosystem with TanStack Start can be found here: #22097 (comment)