Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion packages/vite/src/node/plugins/css.ts
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,7 @@ const commonjsProxyRE = /[?&]commonjs-proxy/
const inlineRE = /[?&]inline\b/
const inlineCSSRE = /[?&]inline-css\b/
const styleAttrRE = /[?&]style-attr\b/
const styleTagCloseRE = /<\/style(?=[\t\n\f\r />])/gi
const functionCallRE = /^[A-Z_][.\w-]*\(/i
const transformOnlyRE = /[?&]transform-only\b/
const nonEscapedDoubleQuoteRe = /(?<!\\)"/g
Expand Down Expand Up @@ -563,6 +564,11 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
if (inlineCSS && isHTMLProxy) {
if (styleAttrRE.test(id)) {
css = css.replace(/"/g, '&quot;')
} else {
if (config.command !== 'serve' && config.build.cssMinify) {
css = await minifyCSS(css, config, true, id)
}
css = css.replace(styleTagCloseRE, '<\\/style')
}
const index = htmlProxyIndexRE.exec(id)?.[1]
if (index == null) {
Expand Down Expand Up @@ -3386,7 +3392,7 @@ async function compileLightningCSS(
return id
},
},
minify: config.isProduction && !!config.build.cssMinify,
minify: false,
sourceMap:
config.command === 'build'
? !!config.build.sourcemap
Expand Down
13 changes: 13 additions & 0 deletions playground/css-lightningcss/__tests__/css-lightningcss.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
isBuild,
isBundled,
page,
readFile,
viteTestUrl,
} from '~utils'

Expand Down Expand Up @@ -79,6 +80,18 @@ test.runIf(isBuild)('minify css', async () => {
expect(cssFile).not.toMatch('#ffff00b3')
})

test.runIf(isBuild)('minify inline style', () => {
expect(readFile('dist/index.html')).toContain(
'<style>.inline-style{color:red}</style>',
)
})

test.runIf(isBuild)('escapes closing style tags in inline CSS', () => {
expect(readFile('dist/index.html')).toContain(
'<style>.escaped-closing-style{content:"<\\/style>"}</style>',
)
})

test('css with external url', async () => {
const css = await page.$('.external')
expect(await getBg(css)).toMatch('url("https://vite.dev/logo.svg")')
Expand Down
12 changes: 12 additions & 0 deletions playground/css-lightningcss/index.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
<link rel="stylesheet" href="./linked.css" />

<style>
.inline-style {
color: red;
}
</style>

<style>
.escaped-closing-style {
content: '<\/style>';
}
</style>

<div class="wrapper">
<h1>Lightning CSS</h1>

Expand Down
12 changes: 12 additions & 0 deletions playground/minify/__tests__/minify.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,15 @@ test.runIf(isBuild)('no minifySyntax', () => {
expect(cssContent).toContain('color:#ff0000')
expect(cssContent).not.toContain('/*! explicit comment */')
})

test.runIf(isBuild)('minifies inline style with esbuild', () => {
expect(readFile('dist/index.html')).toContain(
'<style>.inline-style{color:#ff0000}</style>',
)
})

test.runIf(isBuild)('escapes closing style tags with esbuild', () => {
expect(readFile('dist/index.html')).toContain(
'<style>.escaped-closing-style{content:"<\\/style>"}</style>',
)
})
12 changes: 12 additions & 0 deletions playground/minify/index.html
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
<h1>Minify</h1>

<style>
.inline-style {
color: #ff0000;
}
</style>

<style>
.escaped-closing-style {
content: '<\/style>';
}
</style>

<script type="module" src="./main.js"></script>
Loading