@@ -18,6 +18,7 @@ import {
1818 DEFAULT_CONFIG_EXTENSIONS ,
1919 DEFAULT_CONFIG_NAME ,
2020 DTS_EXTENSIONS_PATTERN ,
21+ JS_EXTENSIONS_PATTERN ,
2122 RSLIB_ENTRY_QUERY ,
2223 SWC_HELPERS ,
2324} from './constant' ;
@@ -1060,6 +1061,7 @@ const composeBundlelessExternalConfig = (
10601061 const styleRedirectExtension = redirect . style ?. extension ?? true ;
10611062 const jsRedirectPath = redirect . js ?. path ?? true ;
10621063 const jsRedirectExtension = redirect . js ?. extension ?? true ;
1064+ const assetRedirect = redirect . asset ?? true ;
10631065
10641066 let resolver : RspackResolver | undefined ;
10651067
@@ -1154,15 +1156,26 @@ const composeBundlelessExternalConfig = (
11541156 // If data.request already have an extension, we replace it with new extension
11551157 // This may result in a change in semantics,
11561158 // user should use copy to keep origin file or use another separate entry to deal this
1157- if ( jsRedirectExtension && resolvedRequest . startsWith ( '.' ) ) {
1159+ if ( resolvedRequest . startsWith ( '.' ) ) {
11581160 const ext = extname ( resolvedRequest ) ;
11591161 if ( ext ) {
11601162 // 1. js files hit JS_EXTENSIONS_PATTERN, ./foo.ts -> ./foo.mjs
1161- // 2. asset files, does not match jsExtensionsPattern, eg: ./foo.png -> ./foo.mjs
1162- resolvedRequest = resolvedRequest . replace (
1163- / \. [ ^ . ] + $ / ,
1164- jsExtension ,
1165- ) ;
1163+ if ( JS_EXTENSIONS_PATTERN . test ( resolvedRequest ) ) {
1164+ if ( jsRedirectExtension ) {
1165+ resolvedRequest = resolvedRequest . replace (
1166+ / \. [ ^ . ] + $ / ,
1167+ jsExtension ,
1168+ ) ;
1169+ }
1170+ } else {
1171+ // 2. asset files, does not match jsExtensionsPattern, eg: ./foo.png -> ./foo.mjs
1172+ if ( assetRedirect ) {
1173+ resolvedRequest = resolvedRequest . replace (
1174+ / \. [ ^ . ] + $ / ,
1175+ jsExtension ,
1176+ ) ;
1177+ }
1178+ }
11661179 } else {
11671180 resolvedRequest = `${ resolvedRequest } ${ jsExtension } ` ;
11681181 }
0 commit comments