Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/nuxtPublic

Commit01d459e

Browse files
authored
perf(vite): optimizenuxt:ssr-styles plugin (#33862)
1 parent7b83538 commit01d459e

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

‎packages/vite/src/plugins/ssr-styles.ts‎

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { resolveClientEntry } from '../utils/config'
1313
import{useNitro}from'@nuxt/kit'
1414

1515
constSUPPORTED_FILES_RE=/\.(?:vue|(?:[cm]?j|t)sx?)$/
16+
constQUERY_RE=/\?.+$/
1617

1718
exportfunctionSSRStylesPlugin(nuxt:Nuxt):Plugin|undefined{
1819
if(nuxt.options.dev){return}
@@ -49,7 +50,16 @@ export function SSRStylesPlugin (nuxt: Nuxt): Plugin | undefined {
4950
globalCSS:nuxt.options.css,
5051
}
5152

52-
constrelativeToSrcDir=(path:string)=>relative(nuxt.options.srcDir,path)
53+
// relative file lookup has duplicate checks
54+
constrelativeCache=newMap<string,string>()
55+
constrelativeToSrcDir=(path:string)=>{
56+
letcached=relativeCache.get(path)
57+
if(cached===undefined){
58+
cached=relative(nuxt.options.srcDir,path)
59+
relativeCache.set(path,cached)
60+
}
61+
returncached
62+
}
5363

5464
constwarnCache=newSet<string>()
5565
constcomponents=nuxt.apps.default!.components||[]
@@ -58,6 +68,7 @@ export function SSRStylesPlugin (nuxt: Nuxt): Plugin | undefined {
5868
// .server components without a corresponding .client component will need to be rendered as an island
5969
(component.mode==='server'&&!components.some(c=>c.pascalName===component.pascalName&&c.mode==='client')),
6070
)
71+
constislandPaths=newSet(islands.map(c=>c.filePath))
6172

6273
letentry:string
6374

@@ -192,7 +203,7 @@ export function SSRStylesPlugin (nuxt: Nuxt): Plugin | undefined {
192203

193204
constrelativePath=relativeToSrcDir(moduleId)
194205
if(relativePathincssMap){
195-
cssMap[relativePath]!.inBundle=cssMap[relativePath]!.inBundle??((isVue(moduleId)&&!!relativeToSrcDir(moduleId))||isEntry)
206+
cssMap[relativePath]!.inBundle=cssMap[relativePath]!.inBundle??((isVue(moduleId)&&!!relativePath)||isEntry)
196207
}
197208
}
198209

@@ -232,37 +243,40 @@ export function SSRStylesPlugin (nuxt: Nuxt): Plugin | undefined {
232243

233244
const{ pathname, search}=parseURL(decodeURIComponent(pathToFileURL(id).href))
234245

235-
if(!(idinclientCSSMap)&&!islands.some(c=>c.filePath===pathname)){return}
246+
if(!(idinclientCSSMap)&&!islandPaths.has(pathname)){return}
236247

237248
constquery=parseQuery(search)
238249
if(query.macro||query.nuxt_component){return}
239250

240-
if(!islands.some(c=>c.filePath===pathname)){
251+
if(!islandPaths.has(pathname)){
241252
if(options.shouldInline===false||(typeofoptions.shouldInline==='function'&&!options.shouldInline(id))){return}
242253
}
243254

244255
constrelativeId=relativeToSrcDir(id)
245256
constidMap=cssMap[relativeId]||={files:[]}
246257

247258
constemittedIds=newSet<string>()
259+
constidFilename=filename(id)
248260

249261
letstyleCtr=0
250262
constids=clientCSSMap[id]||[]
251263
for(constfileofids){
264+
if(emittedIds.has(file)){continue}
265+
constfileInline=file+'?inline&used'
252266
constresolved=awaitthis.resolve(file)??awaitthis.resolve(file,id)
253-
constres=awaitthis.resolve(file+'?inline&used')??awaitthis.resolve(file+'?inline&used',id)
267+
constres=awaitthis.resolve(fileInline)??awaitthis.resolve(fileInline,id)
254268
if(!resolved||!res){
255269
if(!warnCache.has(file)){
256270
warnCache.add(file)
257271
this.warn(`[nuxt] Cannot extract styles for \`${file}\`. Its styles will not be inlined when server-rendering.`)
258272
}
259273
continue
260274
}
261-
if(emittedIds.has(file)){continue}
275+
emittedIds.add(file)
262276
constref=this.emitFile({
263277
type:'chunk',
264-
name:`${filename(id)}-styles-${++styleCtr}.mjs`,
265-
id:file+'?inline&used',
278+
name:`${idFilename}-styles-${++styleCtr}.mjs`,
279+
id:fileInline,
266280
})
267281

268282
idRefMap[relativeToSrcDir(file)]=ref
@@ -272,12 +286,12 @@ export function SSRStylesPlugin (nuxt: Nuxt): Plugin | undefined {
272286
if(!SUPPORTED_FILES_RE.test(pathname)){return}
273287

274288
for(constioffindStaticImports(code)){
275-
const{ type}=parseQuery(i.specifier)
276-
if(type!=='style'&&!i.specifier.endsWith('.css')){continue}
289+
if(!i.specifier.endsWith('.css')&&parseQuery(i.specifier).type!=='style'){continue}
277290

278291
constresolved=awaitthis.resolve(i.specifier,id)
279292
if(!resolved){continue}
280-
if(!(awaitthis.resolve(resolved.id+'?inline&used'))){
293+
constresolvedIdInline=resolved.id+'?inline&used'
294+
if(!(awaitthis.resolve(resolvedIdInline))){
281295
if(!warnCache.has(resolved.id)){
282296
warnCache.add(resolved.id)
283297
this.warn(`[nuxt] Cannot extract styles for \`${i.specifier}\`. Its styles will not be inlined when server-rendering.`)
@@ -288,8 +302,8 @@ export function SSRStylesPlugin (nuxt: Nuxt): Plugin | undefined {
288302
if(emittedIds.has(resolved.id)){continue}
289303
constref=this.emitFile({
290304
type:'chunk',
291-
name:`${filename(id)}-styles-${++styleCtr}.mjs`,
292-
id:resolved.id+'?inline&used',
305+
name:`${idFilename}-styles-${++styleCtr}.mjs`,
306+
id:resolvedIdInline,
293307
})
294308

295309
idRefMap[relativeToSrcDir(resolved.id)]=ref
@@ -302,5 +316,5 @@ export function SSRStylesPlugin (nuxt: Nuxt): Plugin | undefined {
302316
}
303317

304318
functionfilename(name:string){
305-
return_filename(name.replace(/\?.+$/,''))
319+
return_filename(name.replace(QUERY_RE,''))
306320
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp