Skip to content

fix(css): preserve dollar signs in external @import urls with lightningcss#22718

Merged
sapphi-red merged 2 commits into
mainfrom
shulaoda/06-19-fix_css_preserve_dollar_signs_in_external_import_urls_with_lightningcss
Jun 30, 2026
Merged

fix(css): preserve dollar signs in external @import urls with lightningcss#22718
sapphi-red merged 2 commits into
mainfrom
shulaoda/06-19-fix_css_preserve_dollar_signs_in_external_import_urls_with_lightningcss

Conversation

@shulaoda

@shulaoda shulaoda commented Jun 19, 2026

Copy link
Copy Markdown
Member

With the lightningcss transformer, an external @import URL containing $ could be corrupted in the output.

Problem

  • After lightningcss analyzes dependencies, placeholders are swapped back to real URLs. The import case used css.replace(dep.placeholder, dep.url) with dep.url as a replacement string.
  • In a replacement string, $&, $`, $', $n, $$ are special patterns. So a URL like https://cdn.example.com/a.css?q=$& gets mangled — $& is expanded to the matched placeholder text instead of being inserted verbatim.
  • The adjacent url case already guards against this with a function replacer; the import case did not.

Fix

  • Use a function replacer (() => dep.url) so the URL is inserted literally, with no replacement-pattern interpretation.

Tests

  • Added a preprocessCSS test using the lightningcss transformer with an external @import URL containing $&. It fails without this change (the URL is mangled) and passes with it.

@shulaoda
shulaoda requested review from sapphi-red and removed request for sapphi-red June 19, 2026 11:53
@shulaoda
shulaoda marked this pull request as draft June 19, 2026 12:28
@shulaoda
shulaoda force-pushed the shulaoda/06-19-fix_css_preserve_dollar_signs_in_external_import_urls_with_lightningcss branch from 756551e to 1811c4c Compare June 19, 2026 12:57
@shulaoda
shulaoda marked this pull request as ready for review June 19, 2026 13:00
@sapphi-red sapphi-red changed the title fix(css): preserve dollar signs in external @import urls with lightningcss fix(css): preserve dollar signs in external @import urls with lightningcss Jun 30, 2026
@sapphi-red sapphi-red added feat: css p2-edge-case Bug, but has workaround or limited in scope (priority) labels Jun 30, 2026
@sapphi-red
sapphi-red enabled auto-merge (squash) June 30, 2026 08:21
@sapphi-red
sapphi-red merged commit 9fa7ab4 into main Jun 30, 2026
26 checks passed
@sapphi-red
sapphi-red deleted the shulaoda/06-19-fix_css_preserve_dollar_signs_in_external_import_urls_with_lightningcss branch June 30, 2026 08:25
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 4, 2026
| datasource | package | from  | to    |
| ---------- | ------- | ----- | ----- |
| npm        | vite    | 8.1.0 | 8.1.3 |


## [v8.1.3](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-813-2026-07-02-small)

##### Bug Fixes

- **css:** inject inlined CSS after the shebang line ([#22717](vitejs/vite#22717)) ([1534d36](vitejs/vite@1534d36))
- **deps:** bump `es-module-lexer` to 2.3.0 ([#22838](vitejs/vite#22838)) ([7103c3a](vitejs/vite@7103c3a))
- preload css for nested dynamic imports ([#22759](vitejs/vite#22759)) ([2c53054](vitejs/vite@2c53054))
- **ssr:** correct stacktrace column position for first line ([#22828](vitejs/vite#22828)) ([c4acd69](vitejs/vite@c4acd69))


## [v8.1.2](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-812-2026-06-30-small)

##### Bug Fixes

- **deps:** revert es-module-lexer to 2.1.0 ([#22827](vitejs/vite#22827)) ([0d3bd7c](vitejs/vite@0d3bd7c))
- restore, "fix: resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757))" ([#22825](vitejs/vite#22825)) ([efb98cc](vitejs/vite@efb98cc))
- revert, "fix: escape ids with multiple null bytes ([#22687](vitejs/vite#22687))" ([cccef55](vitejs/vite@cccef55))
- revert, "fix: resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757))" ([cf97711](vitejs/vite@cf97711))


## [v8.1.1](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-811-2026-06-30-small)

##### Features

- update dynamic import warning to link to Vite docs ([#22823](vitejs/vite#22823)) ([62bd7af](vitejs/vite@62bd7af))

##### Bug Fixes

- **bundled-dev:** avoid stack overflow on `import.meta.hot.invalidate()` ([#22797](vitejs/vite#22797)) ([709eb8e](vitejs/vite@709eb8e))
- **bundled-dev:** serve assets emitted during HMR/lazy compile ([#22745](vitejs/vite#22745)) ([5876b2c](vitejs/vite@5876b2c))
- **bundledDev:** skip plugin transform hooks for rolldown-lazy stub modules ([#22778](vitejs/vite#22778)) ([8f925e2](vitejs/vite@8f925e2))
- **css:** preserve dollar signs in external `@import` urls with lightningcss ([#22718](vitejs/vite#22718)) ([9fa7ab4](vitejs/vite@9fa7ab4))
- **css:** resolve tsconfig paths in CSS and Sass [@import](https://github.com/import) ([#22775](vitejs/vite#22775)) ([ef0b891](vitejs/vite@ef0b891))
- **deps:** update all non-major dependencies ([#22734](vitejs/vite#22734)) ([e635f49](vitejs/vite@e635f49))
- **deps:** update all non-major dependencies ([#22804](vitejs/vite#22804)) ([8837400](vitejs/vite@8837400))
- **deps:** update rolldown-related dependencies ([#22591](vitejs/vite#22591)) ([2ce6677](vitejs/vite@2ce6677))
- escape ids with multiple null bytes ([#22687](vitejs/vite#22687)) ([833fc30](vitejs/vite@833fc30))
- hide console window when running 'net use' on Windows ([#22698](vitejs/vite#22698)) ([92b63f2](vitejs/vite@92b63f2))
- ignore bundled config temp dir ([#22800](vitejs/vite#22800)) ([043a810](vitejs/vite@043a810))
- invert `esbuild.jsxSideEffects` when converting to `oxc.jsx.pure` ([#22809](vitejs/vite#22809)) ([33895ba](vitejs/vite@33895ba))
- **optimize-deps:** ignore `ERR_CLOSED_SERVER` in scanner ([#22784](vitejs/vite#22784)) ([085a0ab](vitejs/vite@085a0ab))
- **optimizer:** scanner should resolve `input` from `root` ([#22769](vitejs/vite#22769)) ([9722b07](vitejs/vite@9722b07))
- resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757)) ([2531ac7](vitejs/vite@2531ac7))
- return sourcemap field from some plugins that were lacking ([#22782](vitejs/vite#22782)) ([7e18bf8](vitejs/vite@7e18bf8))
- **server:** handle malformed URI in indexHtmlMiddleware ([#22781](vitejs/vite#22781)) ([84f5ccc](vitejs/vite@84f5ccc))

##### Miscellaneous Chores

- improve dependency optimizer messages ([#22549](vitejs/vite#22549)) ([092cb3b](vitejs/vite@092cb3b))

##### Code Refactoring

- **css:** remove lightningcss null byte bug workaround ([#22822](vitejs/vite#22822)) ([2dafd3b](vitejs/vite@2dafd3b))
- use pre-defined environments variable to avoid duplicate `Object.values` calls ([#22790](vitejs/vite#22790)) ([1113acf](vitejs/vite@1113acf))

##### Tests

- enable "manual chunk path" test and remove "worker.format error" test ([#22824](vitejs/vite#22824)) ([c088511](vitejs/vite@c088511))
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 5, 2026
| datasource | package | from  | to    |
| ---------- | ------- | ----- | ----- |
| npm        | vite    | 8.1.0 | 8.1.3 |


## [v8.1.3](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-813-2026-07-02-small)

##### Bug Fixes

- **css:** inject inlined CSS after the shebang line ([#22717](vitejs/vite#22717)) ([1534d36](vitejs/vite@1534d36))
- **deps:** bump `es-module-lexer` to 2.3.0 ([#22838](vitejs/vite#22838)) ([7103c3a](vitejs/vite@7103c3a))
- preload css for nested dynamic imports ([#22759](vitejs/vite#22759)) ([2c53054](vitejs/vite@2c53054))
- **ssr:** correct stacktrace column position for first line ([#22828](vitejs/vite#22828)) ([c4acd69](vitejs/vite@c4acd69))


## [v8.1.2](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-812-2026-06-30-small)

##### Bug Fixes

- **deps:** revert es-module-lexer to 2.1.0 ([#22827](vitejs/vite#22827)) ([0d3bd7c](vitejs/vite@0d3bd7c))
- restore, "fix: resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757))" ([#22825](vitejs/vite#22825)) ([efb98cc](vitejs/vite@efb98cc))
- revert, "fix: escape ids with multiple null bytes ([#22687](vitejs/vite#22687))" ([cccef55](vitejs/vite@cccef55))
- revert, "fix: resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757))" ([cf97711](vitejs/vite@cf97711))


## [v8.1.1](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-811-2026-06-30-small)

##### Features

- update dynamic import warning to link to Vite docs ([#22823](vitejs/vite#22823)) ([62bd7af](vitejs/vite@62bd7af))

##### Bug Fixes

- **bundled-dev:** avoid stack overflow on `import.meta.hot.invalidate()` ([#22797](vitejs/vite#22797)) ([709eb8e](vitejs/vite@709eb8e))
- **bundled-dev:** serve assets emitted during HMR/lazy compile ([#22745](vitejs/vite#22745)) ([5876b2c](vitejs/vite@5876b2c))
- **bundledDev:** skip plugin transform hooks for rolldown-lazy stub modules ([#22778](vitejs/vite#22778)) ([8f925e2](vitejs/vite@8f925e2))
- **css:** preserve dollar signs in external `@import` urls with lightningcss ([#22718](vitejs/vite#22718)) ([9fa7ab4](vitejs/vite@9fa7ab4))
- **css:** resolve tsconfig paths in CSS and Sass [@import](https://github.com/import) ([#22775](vitejs/vite#22775)) ([ef0b891](vitejs/vite@ef0b891))
- **deps:** update all non-major dependencies ([#22734](vitejs/vite#22734)) ([e635f49](vitejs/vite@e635f49))
- **deps:** update all non-major dependencies ([#22804](vitejs/vite#22804)) ([8837400](vitejs/vite@8837400))
- **deps:** update rolldown-related dependencies ([#22591](vitejs/vite#22591)) ([2ce6677](vitejs/vite@2ce6677))
- escape ids with multiple null bytes ([#22687](vitejs/vite#22687)) ([833fc30](vitejs/vite@833fc30))
- hide console window when running 'net use' on Windows ([#22698](vitejs/vite#22698)) ([92b63f2](vitejs/vite@92b63f2))
- ignore bundled config temp dir ([#22800](vitejs/vite#22800)) ([043a810](vitejs/vite@043a810))
- invert `esbuild.jsxSideEffects` when converting to `oxc.jsx.pure` ([#22809](vitejs/vite#22809)) ([33895ba](vitejs/vite@33895ba))
- **optimize-deps:** ignore `ERR_CLOSED_SERVER` in scanner ([#22784](vitejs/vite#22784)) ([085a0ab](vitejs/vite@085a0ab))
- **optimizer:** scanner should resolve `input` from `root` ([#22769](vitejs/vite#22769)) ([9722b07](vitejs/vite@9722b07))
- resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757)) ([2531ac7](vitejs/vite@2531ac7))
- return sourcemap field from some plugins that were lacking ([#22782](vitejs/vite#22782)) ([7e18bf8](vitejs/vite@7e18bf8))
- **server:** handle malformed URI in indexHtmlMiddleware ([#22781](vitejs/vite#22781)) ([84f5ccc](vitejs/vite@84f5ccc))

##### Miscellaneous Chores

- improve dependency optimizer messages ([#22549](vitejs/vite#22549)) ([092cb3b](vitejs/vite@092cb3b))

##### Code Refactoring

- **css:** remove lightningcss null byte bug workaround ([#22822](vitejs/vite#22822)) ([2dafd3b](vitejs/vite@2dafd3b))
- use pre-defined environments variable to avoid duplicate `Object.values` calls ([#22790](vitejs/vite#22790)) ([1113acf](vitejs/vite@1113acf))

##### Tests

- enable "manual chunk path" test and remove "worker.format error" test ([#22824](vitejs/vite#22824)) ([c088511](vitejs/vite@c088511))
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 15, 2026
| datasource | package | from  | to    |
| ---------- | ------- | ----- | ----- |
| npm        | vite    | 8.1.0 | 8.1.4 |


## [v8.1.4](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-814-2026-07-09-small)

##### Features

- **legacy:** prefer oxc as minifier (fix [#21973](vitejs/vite#21973)) ([#22468](vitejs/vite#22468)) ([ab5dafa](vitejs/vite@ab5dafa))

##### Bug Fixes

- **build:** add workaround for building on stackblitz ([#22840](vitejs/vite#22840)) ([575c32c](vitejs/vite@575c32c))
- **build:** keep `import.meta.url` in preload function as-is ([#22839](vitejs/vite#22839)) ([f1f90ed](vitejs/vite@f1f90ed))
- **deps:** update all non-major dependencies ([#22865](vitejs/vite#22865)) ([d4295a9](vitejs/vite@d4295a9))
- **deps:** update rolldown-related dependencies ([#22866](vitejs/vite#22866)) ([7cf07e4](vitejs/vite@7cf07e4))
- **html:** avoid backtracking in import-only check ([#22848](vitejs/vite#22848)) ([b5868c0](vitejs/vite@b5868c0))
- **optimizer:** avoid optimizer run for transform request before init ([#22852](vitejs/vite#22852)) ([72a5e21](vitejs/vite@72a5e21))
- **ssr:** align named export function call stacktrace column with Node ([#22829](vitejs/vite#22829)) ([173a1b6](vitejs/vite@173a1b6))
- strip pure CSS chunk imports when chunkImportMap is enabled ([#22841](vitejs/vite#22841)) ([648bd04](vitejs/vite@648bd04))

##### Documentation

- fix incorrect `@default` for `server.cors` ([#22859](vitejs/vite#22859)) ([70435b2](vitejs/vite@70435b2))

##### Miscellaneous Chores

- **deps:** update dependency postcss-modules to v9 ([#22867](vitejs/vite#22867)) ([a9539d6](vitejs/vite@a9539d6))

##### Code Refactoring

- eliminate ineffectiveDynamicImport warn ([#22876](vitejs/vite#22876)) ([ea22fb3](vitejs/vite@ea22fb3))

##### Tests

- avoid warnings ([#22851](vitejs/vite#22851)) ([af21ab6](vitejs/vite@af21ab6))

##### Build System

- remove the custom onLog function ([#22878](vitejs/vite#22878)) ([2c4a217](vitejs/vite@2c4a217))
- replace deprecated `onwarn` with `onLog` ([#22741](vitejs/vite#22741)) ([c581b55](vitejs/vite@c581b55))


## [v8.1.3](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-813-2026-07-02-small)

##### Bug Fixes

- **css:** inject inlined CSS after the shebang line ([#22717](vitejs/vite#22717)) ([1534d36](vitejs/vite@1534d36))
- **deps:** bump `es-module-lexer` to 2.3.0 ([#22838](vitejs/vite#22838)) ([7103c3a](vitejs/vite@7103c3a))
- preload css for nested dynamic imports ([#22759](vitejs/vite#22759)) ([2c53054](vitejs/vite@2c53054))
- **ssr:** correct stacktrace column position for first line ([#22828](vitejs/vite#22828)) ([c4acd69](vitejs/vite@c4acd69))


## [v8.1.2](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-812-2026-06-30-small)

##### Bug Fixes

- **deps:** revert es-module-lexer to 2.1.0 ([#22827](vitejs/vite#22827)) ([0d3bd7c](vitejs/vite@0d3bd7c))
- restore, "fix: resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757))" ([#22825](vitejs/vite#22825)) ([efb98cc](vitejs/vite@efb98cc))
- revert, "fix: escape ids with multiple null bytes ([#22687](vitejs/vite#22687))" ([cccef55](vitejs/vite@cccef55))
- revert, "fix: resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757))" ([cf97711](vitejs/vite@cf97711))


## [v8.1.1](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-811-2026-06-30-small)

##### Features

- update dynamic import warning to link to Vite docs ([#22823](vitejs/vite#22823)) ([62bd7af](vitejs/vite@62bd7af))

##### Bug Fixes

- **bundled-dev:** avoid stack overflow on `import.meta.hot.invalidate()` ([#22797](vitejs/vite#22797)) ([709eb8e](vitejs/vite@709eb8e))
- **bundled-dev:** serve assets emitted during HMR/lazy compile ([#22745](vitejs/vite#22745)) ([5876b2c](vitejs/vite@5876b2c))
- **bundledDev:** skip plugin transform hooks for rolldown-lazy stub modules ([#22778](vitejs/vite#22778)) ([8f925e2](vitejs/vite@8f925e2))
- **css:** preserve dollar signs in external `@import` urls with lightningcss ([#22718](vitejs/vite#22718)) ([9fa7ab4](vitejs/vite@9fa7ab4))
- **css:** resolve tsconfig paths in CSS and Sass [@import](https://github.com/import) ([#22775](vitejs/vite#22775)) ([ef0b891](vitejs/vite@ef0b891))
- **deps:** update all non-major dependencies ([#22734](vitejs/vite#22734)) ([e635f49](vitejs/vite@e635f49))
- **deps:** update all non-major dependencies ([#22804](vitejs/vite#22804)) ([8837400](vitejs/vite@8837400))
- **deps:** update rolldown-related dependencies ([#22591](vitejs/vite#22591)) ([2ce6677](vitejs/vite@2ce6677))
- escape ids with multiple null bytes ([#22687](vitejs/vite#22687)) ([833fc30](vitejs/vite@833fc30))
- hide console window when running 'net use' on Windows ([#22698](vitejs/vite#22698)) ([92b63f2](vitejs/vite@92b63f2))
- ignore bundled config temp dir ([#22800](vitejs/vite#22800)) ([043a810](vitejs/vite@043a810))
- invert `esbuild.jsxSideEffects` when converting to `oxc.jsx.pure` ([#22809](vitejs/vite#22809)) ([33895ba](vitejs/vite@33895ba))
- **optimize-deps:** ignore `ERR_CLOSED_SERVER` in scanner ([#22784](vitejs/vite#22784)) ([085a0ab](vitejs/vite@085a0ab))
- **optimizer:** scanner should resolve `input` from `root` ([#22769](vitejs/vite#22769)) ([9722b07](vitejs/vite@9722b07))
- resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757)) ([2531ac7](vitejs/vite@2531ac7))
- return sourcemap field from some plugins that were lacking ([#22782](vitejs/vite#22782)) ([7e18bf8](vitejs/vite@7e18bf8))
- **server:** handle malformed URI in indexHtmlMiddleware ([#22781](vitejs/vite#22781)) ([84f5ccc](vitejs/vite@84f5ccc))

##### Miscellaneous Chores

- improve dependency optimizer messages ([#22549](vitejs/vite#22549)) ([092cb3b](vitejs/vite@092cb3b))

##### Code Refactoring

- **css:** remove lightningcss null byte bug workaround ([#22822](vitejs/vite#22822)) ([2dafd3b](vitejs/vite@2dafd3b))
- use pre-defined environments variable to avoid duplicate `Object.values` calls ([#22790](vitejs/vite#22790)) ([1113acf](vitejs/vite@1113acf))

##### Tests

- enable "manual chunk path" test and remove "worker.format error" test ([#22824](vitejs/vite#22824)) ([c088511](vitejs/vite@c088511))
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 18, 2026
| datasource | package | from  | to    |
| ---------- | ------- | ----- | ----- |
| npm        | vite    | 8.1.0 | 8.1.5 |


## [v8.1.5](https://github.com/vitejs/vite/releases/tag/v8.1.5)

Please refer to [CHANGELOG.md](https://github.com/vitejs/vite/blob/v8.1.5/packages/vite/CHANGELOG.md) for details.


## [v8.1.4](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-814-2026-07-09-small)

##### Features

- **legacy:** prefer oxc as minifier (fix [#21973](vitejs/vite#21973)) ([#22468](vitejs/vite#22468)) ([ab5dafa](vitejs/vite@ab5dafa))

##### Bug Fixes

- **build:** add workaround for building on stackblitz ([#22840](vitejs/vite#22840)) ([575c32c](vitejs/vite@575c32c))
- **build:** keep `import.meta.url` in preload function as-is ([#22839](vitejs/vite#22839)) ([f1f90ed](vitejs/vite@f1f90ed))
- **deps:** update all non-major dependencies ([#22865](vitejs/vite#22865)) ([d4295a9](vitejs/vite@d4295a9))
- **deps:** update rolldown-related dependencies ([#22866](vitejs/vite#22866)) ([7cf07e4](vitejs/vite@7cf07e4))
- **html:** avoid backtracking in import-only check ([#22848](vitejs/vite#22848)) ([b5868c0](vitejs/vite@b5868c0))
- **optimizer:** avoid optimizer run for transform request before init ([#22852](vitejs/vite#22852)) ([72a5e21](vitejs/vite@72a5e21))
- **ssr:** align named export function call stacktrace column with Node ([#22829](vitejs/vite#22829)) ([173a1b6](vitejs/vite@173a1b6))
- strip pure CSS chunk imports when chunkImportMap is enabled ([#22841](vitejs/vite#22841)) ([648bd04](vitejs/vite@648bd04))

##### Documentation

- fix incorrect `@default` for `server.cors` ([#22859](vitejs/vite#22859)) ([70435b2](vitejs/vite@70435b2))

##### Miscellaneous Chores

- **deps:** update dependency postcss-modules to v9 ([#22867](vitejs/vite#22867)) ([a9539d6](vitejs/vite@a9539d6))

##### Code Refactoring

- eliminate ineffectiveDynamicImport warn ([#22876](vitejs/vite#22876)) ([ea22fb3](vitejs/vite@ea22fb3))

##### Tests

- avoid warnings ([#22851](vitejs/vite#22851)) ([af21ab6](vitejs/vite@af21ab6))

##### Build System

- remove the custom onLog function ([#22878](vitejs/vite#22878)) ([2c4a217](vitejs/vite@2c4a217))
- replace deprecated `onwarn` with `onLog` ([#22741](vitejs/vite#22741)) ([c581b55](vitejs/vite@c581b55))


## [v8.1.3](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-813-2026-07-02-small)

##### Bug Fixes

- **css:** inject inlined CSS after the shebang line ([#22717](vitejs/vite#22717)) ([1534d36](vitejs/vite@1534d36))
- **deps:** bump `es-module-lexer` to 2.3.0 ([#22838](vitejs/vite#22838)) ([7103c3a](vitejs/vite@7103c3a))
- preload css for nested dynamic imports ([#22759](vitejs/vite#22759)) ([2c53054](vitejs/vite@2c53054))
- **ssr:** correct stacktrace column position for first line ([#22828](vitejs/vite#22828)) ([c4acd69](vitejs/vite@c4acd69))


## [v8.1.2](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-812-2026-06-30-small)

##### Bug Fixes

- **deps:** revert es-module-lexer to 2.1.0 ([#22827](vitejs/vite#22827)) ([0d3bd7c](vitejs/vite@0d3bd7c))
- restore, "fix: resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757))" ([#22825](vitejs/vite#22825)) ([efb98cc](vitejs/vite@efb98cc))
- revert, "fix: escape ids with multiple null bytes ([#22687](vitejs/vite#22687))" ([cccef55](vitejs/vite@cccef55))
- revert, "fix: resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757))" ([cf97711](vitejs/vite@cf97711))


## [v8.1.1](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-811-2026-06-30-small)

##### Features

- update dynamic import warning to link to Vite docs ([#22823](vitejs/vite#22823)) ([62bd7af](vitejs/vite@62bd7af))

##### Bug Fixes

- **bundled-dev:** avoid stack overflow on `import.meta.hot.invalidate()` ([#22797](vitejs/vite#22797)) ([709eb8e](vitejs/vite@709eb8e))
- **bundled-dev:** serve assets emitted during HMR/lazy compile ([#22745](vitejs/vite#22745)) ([5876b2c](vitejs/vite@5876b2c))
- **bundledDev:** skip plugin transform hooks for rolldown-lazy stub modules ([#22778](vitejs/vite#22778)) ([8f925e2](vitejs/vite@8f925e2))
- **css:** preserve dollar signs in external `@import` urls with lightningcss ([#22718](vitejs/vite#22718)) ([9fa7ab4](vitejs/vite@9fa7ab4))
- **css:** resolve tsconfig paths in CSS and Sass [@import](https://github.com/import) ([#22775](vitejs/vite#22775)) ([ef0b891](vitejs/vite@ef0b891))
- **deps:** update all non-major dependencies ([#22734](vitejs/vite#22734)) ([e635f49](vitejs/vite@e635f49))
- **deps:** update all non-major dependencies ([#22804](vitejs/vite#22804)) ([8837400](vitejs/vite@8837400))
- **deps:** update rolldown-related dependencies ([#22591](vitejs/vite#22591)) ([2ce6677](vitejs/vite@2ce6677))
- escape ids with multiple null bytes ([#22687](vitejs/vite#22687)) ([833fc30](vitejs/vite@833fc30))
- hide console window when running 'net use' on Windows ([#22698](vitejs/vite#22698)) ([92b63f2](vitejs/vite@92b63f2))
- ignore bundled config temp dir ([#22800](vitejs/vite#22800)) ([043a810](vitejs/vite@043a810))
- invert `esbuild.jsxSideEffects` when converting to `oxc.jsx.pure` ([#22809](vitejs/vite#22809)) ([33895ba](vitejs/vite@33895ba))
- **optimize-deps:** ignore `ERR_CLOSED_SERVER` in scanner ([#22784](vitejs/vite#22784)) ([085a0ab](vitejs/vite@085a0ab))
- **optimizer:** scanner should resolve `input` from `root` ([#22769](vitejs/vite#22769)) ([9722b07](vitejs/vite@9722b07))
- resolve pnpm .modules.yaml from workspace root instead of cwd ([#22757](vitejs/vite#22757)) ([2531ac7](vitejs/vite@2531ac7))
- return sourcemap field from some plugins that were lacking ([#22782](vitejs/vite#22782)) ([7e18bf8](vitejs/vite@7e18bf8))
- **server:** handle malformed URI in indexHtmlMiddleware ([#22781](vitejs/vite#22781)) ([84f5ccc](vitejs/vite@84f5ccc))

##### Miscellaneous Chores

- improve dependency optimizer messages ([#22549](vitejs/vite#22549)) ([092cb3b](vitejs/vite@092cb3b))

##### Code Refactoring

- **css:** remove lightningcss null byte bug workaround ([#22822](vitejs/vite#22822)) ([2dafd3b](vitejs/vite@2dafd3b))
- use pre-defined environments variable to avoid duplicate `Object.values` calls ([#22790](vitejs/vite#22790)) ([1113acf](vitejs/vite@1113acf))

##### Tests

- enable "manual chunk path" test and remove "worker.format error" test ([#22824](vitejs/vite#22824)) ([c088511](vitejs/vite@c088511))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feat: css p2-edge-case Bug, but has workaround or limited in scope (priority)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants