Skip to content

Commit e63e354

Browse files
committed
fix: fix server css module hmr
1 parent b213799 commit e63e354

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

packages/plugin-rsc/src/plugin.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1976,6 +1976,39 @@ function vitePluginRscCss(
19761976
}
19771977
},
19781978
},
1979+
{
1980+
// self accept css module used in server component to avoid full reload
1981+
// https://github.com/vitejs/vite/blob/84079a84ad94de4c1ef4f1bdb2ab448ff2c01196/packages/vite/src/node/plugins/css.ts#L1096
1982+
name: 'rsc:rsc-css-self-accept',
1983+
apply: 'serve',
1984+
transform: {
1985+
order: 'post',
1986+
handler(_code, id, _options) {
1987+
if (
1988+
this.environment.name === 'client' &&
1989+
this.environment.mode === 'dev' &&
1990+
isCSSRequest(id)
1991+
) {
1992+
const mod = this.environment.moduleGraph.getModuleById(id)
1993+
const { filename, query } = parseIdQuery(id)
1994+
if (mod && !mod.isSelfAccepting && 'direct' in query) {
1995+
const serverMods =
1996+
manager.server.environments.rsc!.moduleGraph.getModulesByFile(
1997+
filename,
1998+
)
1999+
// filter out module nodes created by tailwind dependenncy.
2000+
// for Vite 7.1, we can use `m.type !== "asset"`.
2001+
const isServerCss = [...(serverMods ?? [])].some((m) =>
2002+
[...m.importers].some((m) => m.id && !isCSSRequest(m.id)),
2003+
)
2004+
if (isServerCss) {
2005+
mod.isSelfAccepting = true
2006+
}
2007+
}
2008+
}
2009+
},
2010+
},
2011+
},
19792012
{
19802013
name: 'rsc:css-virtual',
19812014
resolveId(source) {

0 commit comments

Comments
 (0)