@@ -183,14 +183,21 @@ export class SetPublicPathPlugin implements Webpack.Plugin {
183
183
for ( const chunk of chunkGroup . chunks ) {
184
184
if ( chunk [ SHOULD_REPLACE_ASSET_NAME_TOKEN ] ) {
185
185
for ( const assetFilename of chunk . files ) {
186
+ let escapedAssetFilename : string ;
187
+ if ( assetFilename . match ( / \. m a p $ / ) ) {
188
+ escapedAssetFilename = assetFilename . substr ( 0 , assetFilename . length - ( 4 /* '.map'.length */ ) ) ; // Trim the ".map" extension
189
+ escapedAssetFilename = lodash . escapeRegExp ( escapedAssetFilename ) ;
190
+ escapedAssetFilename = JSON . stringify ( escapedAssetFilename ) ; // source in sourcemaps is JSON-encoded
191
+ escapedAssetFilename = escapedAssetFilename . substring ( 1 , escapedAssetFilename . length - 1 ) ; // Trim the quotes from the JSON encoding
192
+ } else {
193
+ escapedAssetFilename = lodash . escapeRegExp ( assetFilename ) ;
194
+ }
195
+
186
196
const asset : IAsset = compilation . assets [ assetFilename ] ;
187
197
const originalAssetSource : string = asset . source ( ) ;
188
198
const originalAssetSize : number = asset . size ( ) ;
189
199
190
- const newAssetSource : string = originalAssetSource . replace (
191
- ASSET_NAME_TOKEN_REGEX ,
192
- lodash . escapeRegExp ( assetFilename )
193
- ) ;
200
+ const newAssetSource : string = originalAssetSource . replace ( ASSET_NAME_TOKEN_REGEX , escapedAssetFilename ) ;
194
201
const sizeDifference : number = assetFilename . length - ASSET_NAME_TOKEN . length ;
195
202
asset . source = ( ) => newAssetSource ;
196
203
asset . size = ( ) => originalAssetSize + sizeDifference ;
0 commit comments