@@ -248,6 +248,55 @@ function patchScssSidecarWatchBehavior(configArray) {
248248 }
249249}
250250
251+ function walkRules ( rules , callback ) {
252+ if ( ! Array . isArray ( rules ) ) {
253+ return ;
254+ }
255+
256+ for ( const rule of rules ) {
257+ if ( ! rule || typeof rule !== 'object' ) {
258+ continue ;
259+ }
260+
261+ callback ( rule ) ;
262+
263+ if ( Array . isArray ( rule . oneOf ) ) {
264+ walkRules ( rule . oneOf , callback ) ;
265+ }
266+
267+ if ( Array . isArray ( rule . rules ) ) {
268+ walkRules ( rule . rules , callback ) ;
269+ }
270+ }
271+ }
272+
273+ function isScssOrSassRule ( rule ) {
274+ return rule . test instanceof RegExp
275+ && ( rule . test . test ( '.scss' ) || rule . test . test ( '.sass' ) ) ;
276+ }
277+
278+ function patchScssRulesToNoop ( configArray ) {
279+ const noopScssLoaderPath = path . resolve ( __dirname , 'noop-scss-loader.js' ) ;
280+
281+ for ( const config of configArray ) {
282+ if ( ! config || typeof config !== 'object' ) {
283+ continue ;
284+ }
285+
286+ walkRules ( config ?. module ?. rules , ( rule ) => {
287+ if ( ! isScssOrSassRule ( rule ) ) {
288+ return ;
289+ }
290+
291+ rule . use = [
292+ {
293+ loader : noopScssLoaderPath ,
294+ } ,
295+ ] ;
296+ } ) ;
297+ }
298+ }
299+
251300function stripWebpackBarPlugins ( configArray ) {
252301 for ( const config of configArray ) {
253302 if ( ! config || typeof config !== 'object' || ! Array . isArray ( config . plugins ) ) {
@@ -361,6 +410,8 @@ function loadPatchedWebpackConfig(explicitProjectRoot) {
361410 }
362411 console . log ( '[SidworksDevTools] SCSS sidecar mode enabled (webpack SCSS entry disabled)' ) ;
363412 patchScssSidecarWatchBehavior ( configArray ) ;
413+ patchScssRulesToNoop ( configArray ) ;
414+ console . log ( '[SidworksDevTools] SCSS sidecar mode: webpack SCSS imports disabled (handled by sidecar)' ) ;
364415 console . log ( '[SidworksDevTools] SCSS sidecar mode: webpack ignores SCSS/SASS change events (JS rebuilds only on JS changes)' ) ;
365416 }
366417
0 commit comments