@@ -20,6 +20,9 @@ import { joinBase } from './http.js';
2020
2121export type DevStyleDescriptor = { id : string ; content : string ; attrs ?: Record < string , string > } ;
2222export type DevStyleSource = { id : string ; url : string } ;
23+ export type DevStyleFilter = ( id : string ) => boolean ;
24+
25+ const defaultStyleFilter : DevStyleFilter = ( id ) => ! id . includes ( 'node_modules' ) ;
2326
2427export type ResolvedAssets = {
2528 js : string [ ] ;
@@ -215,16 +218,19 @@ async function collectModuleDeps(
215218 file : string ,
216219 deps : Set < EnvironmentModuleNode > ,
217220 crawled : Set < string > ,
221+ filter : DevStyleFilter ,
218222 onFile ?: ( file : string ) => void ,
219223 importer ?: string ,
220224) : Promise < void > {
221225 crawled . add ( file ) ;
222226 const node = await getModuleNode ( env , file , importer ) ;
223227 if ( ! node ?. id || deps . has ( node ) ) return ;
224228 deps . add ( node ) ;
225- if ( node . file && ! node . id . includes ( 'node_modules' ) ) onFile ?.( node . file ) ;
226229
227- if ( cssFileRegExp . test ( node . url . split ( '?' ) [ 0 ] ) || node . id . includes ( 'node_modules' ) ) return ;
230+ const isCss = cssFileRegExp . test ( node . url . split ( '?' ) [ 0 ] ) ;
231+ if ( ! isCss && node . file && ! node . id . startsWith ( '\0' ) && ! filter ( node . file ) ) return ;
232+ if ( node . file ) onFile ?.( node . file ) ;
233+ if ( isCss ) return ;
228234
229235 if ( ! node . transformResult ) {
230236 await env . transformRequest ( node . url ) . catch ( ( ) => { } ) ;
@@ -236,7 +242,7 @@ async function collectModuleDeps(
236242 // from dynamicDeps — dynamic imports load their own styles when rendered.
237243 for ( const dep of directDeps ) {
238244 if ( crawled . has ( dep ) ) continue ;
239- await collectModuleDeps ( env , dep , deps , crawled , onFile , node . id ) ;
245+ await collectModuleDeps ( env , dep , deps , crawled , filter , onFile , node . id ) ;
240246 }
241247}
242248
@@ -249,11 +255,12 @@ export async function collectDevStyleSources(
249255 env : DevEnvironment ,
250256 files : string [ ] ,
251257 onFile ?: ( file : string ) => void ,
258+ filter : DevStyleFilter = defaultStyleFilter ,
252259) : Promise < DevStyleSource [ ] > {
253260 const deps = new Set < EnvironmentModuleNode > ( ) ;
254261 const crawled = new Set < string > ( ) ;
255262 for ( const file of files ) {
256- await collectModuleDeps ( env , file , deps , crawled , onFile ) ;
263+ await collectModuleDeps ( env , file , deps , crawled , filter , onFile ) ;
257264 }
258265
259266 const css : DevStyleSource [ ] = [ ] ;
@@ -281,6 +288,7 @@ export async function collectDevStyleSources(
281288export async function collectDevStyles (
282289 server : ViteDevServer ,
283290 files : string [ ] ,
291+ filter : DevStyleFilter = defaultStyleFilter ,
284292) : Promise < DevStyleDescriptor [ ] > {
285293 const ssrEnv = server . environments ?. ssr ;
286294 const clientEnv = server . environments ?. client ;
@@ -289,6 +297,8 @@ export async function collectDevStyles(
289297 const sources = await collectDevStyleSources (
290298 ssrEnv ,
291299 files . map ( ( file ) => path . resolve ( server . config . root , file ) ) ,
300+ undefined ,
301+ filter ,
292302 ) ;
293303
294304 const css : DevStyleDescriptor [ ] = [ ] ;
@@ -348,7 +358,10 @@ export function devModuleUrl(root: string, base: string, key: string): string {
348358 return joinBase ( base , '/@fs/' + absolute . replace ( / ^ \/ / , '' ) + query ) ;
349359}
350360
351- export function createDevAssetResolver ( server : ViteDevServer ) : DevAssetResolver {
361+ export function createDevAssetResolver (
362+ server : ViteDevServer ,
363+ filter : DevStyleFilter = defaultStyleFilter ,
364+ ) : DevAssetResolver {
352365 // Server-side lazy() re-requests a module's assets on every retry of a
353366 // suspended render pass (retries re-create the component). The build
354367 // manifest answers those repeats synchronously and the pass converges; an
@@ -382,7 +395,7 @@ export function createDevAssetResolver(server: ViteDevServer): DevAssetResolver
382395 // The module's dev URL doubles as its client entry: modulepreload
383396 // hint and hydration module-map value.
384397 const js = [ devModuleUrl ( root , base , key ) ] ;
385- const css = await collectDevStyles ( server , [ key ] ) ;
398+ const css = await collectDevStyles ( server , [ key ] , filter ) ;
386399 return { js, css } ;
387400 } ) ( ) . then (
388401 ( assets ) => {
0 commit comments