Skip to content

Commit 67ff94b

Browse files
authored
fix(ssr): remove pure CSS dynamic import (#17371)
1 parent a8c7083 commit 67ff94b

1 file changed

Lines changed: 58 additions & 1 deletion

File tree

‎packages/vite/src/node/plugins/importAnalysisBuild.ts‎

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,64 @@ export function buildImportAnalysisPlugin(config: ResolvedConfig): Plugin {
318318
},
319319

320320
generateBundle({ format },bundle){
321-
if(format!=='es'||ssr||isWorker){
321+
if(format!=='es'){
322+
return
323+
}
324+
325+
if(ssr||isWorker){
326+
constremovedPureCssFiles=removedPureCssFilesCache.get(config)
327+
if(removedPureCssFiles&&removedPureCssFiles.size>0){
328+
for(constfileinbundle){
329+
constchunk=bundle[file]
330+
if(chunk.type==='chunk'&&chunk.code.includes('import')){
331+
constcode=chunk.code
332+
letimports!: ImportSpecifier[]
333+
try{
334+
imports=parseImports(code)[0].filter((i)=>i.d>-1)
335+
}catch(e: any){
336+
constloc=numberToPos(code,e.idx)
337+
this.error({
338+
name: e.name,
339+
message: e.message,
340+
stack: e.stack,
341+
cause: e.cause,
342+
pos: e.idx,
343+
loc: { ...loc,file: chunk.fileName},
344+
frame: generateCodeFrame(code,loc),
345+
})
346+
}
347+
348+
for(constimpofimports){
349+
const{
350+
n: name,
351+
s: start,
352+
e: end,
353+
ss: expStart,
354+
se: expEnd,
355+
}=imp
356+
leturl=name
357+
if(!url){
358+
constrawUrl=code.slice(start,end)
359+
if(rawUrl[0]===`"`&&rawUrl[rawUrl.length-1]===`"`)
360+
url=rawUrl.slice(1,-1)
361+
}
362+
if(!url)continue
363+
364+
constnormalizedFile=path.posix.join(
365+
path.posix.dirname(chunk.fileName),
366+
url,
367+
)
368+
if(removedPureCssFiles.has(normalizedFile)){
369+
// remove with Promise.resolve({}) while preserving source map location
370+
chunk.code=
371+
chunk.code.slice(0,expStart)+
372+
`Promise.resolve({${''.padEnd(expEnd-expStart-19,' ')}})`+
373+
chunk.code.slice(expEnd)
374+
}
375+
}
376+
}
377+
}
378+
}
322379
return
323380
}
324381

0 commit comments

Comments
 (0)