@@ -172,11 +172,17 @@ let loggedIgnoredCompilerOptions = false
172
172
const reactRefreshLoaderName =
173
173
'next/dist/compiled/@next/react-refresh-utils/dist/loader'
174
174
175
+ function getReactRefreshLoader ( ) {
176
+ return process . env . NEXT_RSPACK
177
+ ? getRspackReactRefresh ( ) . loader
178
+ : require . resolve ( reactRefreshLoaderName )
179
+ }
180
+
175
181
export function attachReactRefresh (
176
182
webpackConfig : webpack . Configuration ,
177
183
targetLoader : webpack . RuleSetUseItem
178
184
) {
179
- const reactRefreshLoader = require . resolve ( reactRefreshLoaderName )
185
+ const reactRefreshLoader = getReactRefreshLoader ( )
180
186
webpackConfig . module ?. rules ?. forEach ( ( rule ) => {
181
187
if ( rule && typeof rule === 'object' && 'use' in rule ) {
182
188
const curr = rule . use
@@ -603,11 +609,7 @@ export default async function getBaseWebpackConfig(
603
609
babelLoader ,
604
610
] . filter ( Boolean )
605
611
606
- // Rspack will inject their own React Refresh loader in @rspack /plugin-react-refresh
607
- const reactRefreshLoaders =
608
- ! isRspack && dev && isClient
609
- ? [ require . resolve ( reactRefreshLoaderName ) ]
610
- : [ ]
612
+ const reactRefreshLoaders = dev && isClient ? [ getReactRefreshLoader ( ) ] : [ ]
611
613
612
614
// client components layers: SSR or browser
613
615
const createClientLayerLoader = ( {
@@ -1900,7 +1902,7 @@ export default async function getBaseWebpackConfig(
1900
1902
isClient &&
1901
1903
( isRspack
1902
1904
? // eslint-disable-next-line
1903
- new ( getRspackReactRefresh ( ) as any ) ( )
1905
+ new ( getRspackReactRefresh ( ) as any ) ( { injectLoader : false } )
1904
1906
: new ReactRefreshWebpackPlugin ( webpack ) ) ,
1905
1907
// Makes sure `Buffer` and `process` are polyfilled in client and flight bundles (same behavior as webpack 4)
1906
1908
( isClient || isEdgeServer ) &&
@@ -2616,8 +2618,7 @@ export default async function getBaseWebpackConfig(
2616
2618
}
2617
2619
2618
2620
// Inject missing React Refresh loaders so that development mode is fast:
2619
- // Rspack will inject their own React Refresh loader in @rspack /plugin-react-refresh
2620
- if ( ! isRspack && dev && isClient ) {
2621
+ if ( dev && isClient ) {
2621
2622
attachReactRefresh ( webpackConfig , defaultLoaders . babel )
2622
2623
}
2623
2624
0 commit comments