@@ -2,6 +2,9 @@ const { mkdirSync, writeFileSync } = require('fs');
22const { basename, dirname, join } = require ( 'path' ) ;
33
44const { SyncWaterfallHook } = require ( 'tapable' ) ;
5+ const webpack = require ( 'webpack' ) ;
6+ // eslint-disable-next-line global-require
7+ const { RawSource } = webpack . sources || require ( 'webpack-sources' ) ;
58
69const { generateManifest, reduceAssets, reduceChunk, transformFiles } = require ( './helpers' ) ;
710
@@ -35,15 +38,23 @@ const emitHook = function emit(
3538) {
3639 const emitCount = emitCountMap . get ( manifestFileName ) - 1 ;
3740 // Disable everything we don't use, add asset info, show cached assets
38- const stats = compilation
39- . getStats ( )
40- . toJson ( { all : false , assets : true , cachedAssets : true , ids : true , publicPath : true } ) ;
41+ const stats = compilation . getStats ( ) . toJson ( {
42+ // all: false,
43+ assets : true ,
44+ cachedAssets : true ,
45+ ids : true ,
46+ publicPath : true
47+ } ) ;
48+
4149 const publicPath = options . publicPath !== null ? options . publicPath : stats . publicPath ;
4250 const { basePath, removeKeyHash } = options ;
4351
4452 emitCountMap . set ( manifestFileName , emitCount ) ;
4553
46- let files = compilation . chunks . reduce ( ( prev , chunk ) => reduceChunk ( prev , chunk , options ) , [ ] ) ;
54+ let files = Array . from ( compilation . chunks ) . reduce (
55+ ( prev , chunk ) => reduceChunk ( prev , chunk , options ) ,
56+ [ ]
57+ ) ;
4758
4859 // module assets don't show up in assetsByChunkName, we're getting them this way
4960 files = stats . assets . reduce ( ( prev , asset ) => reduceAssets ( prev , asset , moduleAssets ) , files ) ;
@@ -79,17 +90,19 @@ const emitHook = function emit(
7990
8091 if ( isLastEmit ) {
8192 const output = options . serialize ( manifest ) ;
82-
83- Object . assign ( compilation . assets , {
84- [ manifestAssetId ] : {
85- source ( ) {
86- return output ;
87- } ,
88- size ( ) {
89- return output . length ;
90- }
91- }
92- } ) ;
93+ //
94+ // Object.assign(compilation.assets, {
95+ // [manifestAssetId]: {
96+ // source() {
97+ // return output;
98+ // },
99+ // size() {
100+ // return output.length;
101+ // }
102+ // }
103+ // });
104+ //
105+ compilation . emitAsset ( manifestAssetId , new RawSource ( output ) ) ;
93106
94107 if ( options . writeToFileEmit ) {
95108 mkdirSync ( dirname ( manifestFileName ) , { recursive : true } ) ;
@@ -100,10 +113,17 @@ const emitHook = function emit(
100113 getCompilerHooks ( compiler ) . afterEmit . call ( manifest ) ;
101114} ;
102115
103- const moduleAssetHook = ( { moduleAssets } , module , file ) => {
104- if ( module . userRequest ) {
105- Object . assign ( moduleAssets , { [ file ] : join ( dirname ( file ) , basename ( module . userRequest ) ) } ) ;
106- }
116+ const normalModuleLoaderHook = ( { moduleAssets } , loaderContext , module ) => {
117+ const { emitFile } = loaderContext ;
118+
119+ // eslint-disable-next-line no-param-reassign
120+ loaderContext . emitFile = ( file , content , sourceMap ) => {
121+ if ( module . userRequest && ! moduleAssets [ file ] ) {
122+ Object . assign ( moduleAssets , { [ file ] : join ( dirname ( file ) , basename ( module . userRequest ) ) } ) ;
123+ }
124+
125+ return emitFile . call ( module , file , content , sourceMap ) ;
126+ } ;
107127} ;
108128
109- module . exports = { beforeRunHook, emitHook, getCompilerHooks, moduleAssetHook } ;
129+ module . exports = { beforeRunHook, emitHook, getCompilerHooks, normalModuleLoaderHook } ;
0 commit comments