Skip to content
Merged
Changes from all commits
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
32 changes: 24 additions & 8 deletions packages/vite/src/node/plugins/css.ts
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,10 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
? rollupOptionsOutput[0]
: rollupOptionsOutput
)?.assetFileNames
const getCssAssetDirname = (cssAssetName: string) => {
const getCssAssetDirname = (
cssAssetName: string,
originalFileName?: string,
) => {
const cssAssetNameDir = path.dirname(cssAssetName)
if (!assetFileNames) {
return path.join(config.build.assetsDir, cssAssetNameDir)
Expand All @@ -484,7 +487,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
assetFileNames({
type: 'asset',
names: [cssAssetName],
originalFileNames: [],
originalFileNames: originalFileName ? [originalFileName] : [],
source: '/* vite internal call, ignore */',
}),
)
Expand Down Expand Up @@ -693,13 +696,14 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
const resolveAssetUrlsInCss = (
chunkCSS: string,
cssAssetName: string,
originalFileName?: string,
) => {
const encodedPublicUrls = encodePublicUrlsInCSS(config)

const relative = config.base === './' || config.base === ''
const cssAssetDirname =
encodedPublicUrls || relative
? slash(getCssAssetDirname(cssAssetName))
? slash(getCssAssetDirname(cssAssetName, originalFileName))
: undefined

const toRelative = (filename: string) => {
Expand Down Expand Up @@ -786,7 +790,11 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {

let cssContent = styles.get(id)!

cssContent = resolveAssetUrlsInCss(cssContent, cssAssetName)
cssContent = resolveAssetUrlsInCss(
cssContent,
cssAssetName,
originalFileName,
)

urlEmitTasks.push({
cssAssetName,
Expand Down Expand Up @@ -880,7 +888,11 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
) ?? false,
)

chunkCSS = resolveAssetUrlsInCss(chunkCSS, cssAssetName)
chunkCSS = resolveAssetUrlsInCss(
chunkCSS,
cssAssetName,
originalFileName,
)

// wait for previous tasks as well
chunkCSS = await codeSplitEmitQueue.run(async () => {
Expand Down Expand Up @@ -957,7 +969,11 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
}
} else {
// resolve public URL from CSS paths, we need to use absolute paths
chunkCSS = resolveAssetUrlsInCss(chunkCSS, getCssBundleName())
chunkCSS = resolveAssetUrlsInCss(
chunkCSS,
getCssBundleName(),
defaultCssBundleName,
)
// finalizeCss is called for the aggregated chunk in generateBundle

chunkCSSMap.set(chunk.fileName, chunkCSS)
Expand Down Expand Up @@ -1046,9 +1062,9 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin {
name: getCssBundleName(),
type: 'asset',
source: extractedCss,
// this file is an implicit entry point, use `style.css` as the original file name
// this file is an implicit entry point, use defaultCssBundleName as the original file name
// this name is also used as a key in the manifest
originalFileName: 'style.css',
originalFileName: defaultCssBundleName,
})
}
}
Expand Down
Loading