4
4
*/
5
5
"use strict" ;
6
6
7
+ const createHash = require ( "./util/createHash" ) ;
8
+ const RequestShortener = require ( "./RequestShortener" ) ;
9
+
10
+ const getHash = str => {
11
+ const hash = createHash ( "md4" ) ;
12
+ hash . update ( str ) ;
13
+ return hash . digest ( "hex" ) . substr ( 0 , 4 ) ;
14
+ } ;
15
+
7
16
class NamedModulesPlugin {
8
17
constructor ( options ) {
9
18
this . options = options || { } ;
@@ -12,7 +21,7 @@ class NamedModulesPlugin {
12
21
apply ( compiler ) {
13
22
compiler . hooks . compilation . tap ( "NamedModulesPlugin" , compilation => {
14
23
compilation . hooks . beforeModuleIds . tap ( "NamedModulesPlugin" , modules => {
15
- let namedModules = { } ;
24
+ const namedModules = new Map ( ) ;
16
25
17
26
for ( const module of modules ) {
18
27
if ( module . id === null && module . libIdent ) {
@@ -21,18 +30,23 @@ class NamedModulesPlugin {
21
30
} ) ;
22
31
}
23
32
24
- if ( module . id ) {
25
- ( namedModules [ module . id ] && namedModules [ module . id ] . push ( module ) ) ||
26
- ( namedModules [ module . id ] = Array . of ( module ) ) ;
33
+ if ( module . id !== null ) {
34
+ if ( namedModules . has ( module . id ) ) {
35
+ namedModules . get ( module . id ) . push ( module ) ;
36
+ } else {
37
+ namedModules . set ( module . id , [ module ] ) ;
38
+ }
27
39
}
28
40
}
29
41
30
- Object . keys ( namedModules ) . forEach ( key => {
31
- const namedModule = namedModules [ key ] ;
42
+ namedModules . forEach ( namedModule => {
32
43
if ( namedModule . length > 1 ) {
33
44
namedModule . forEach ( module => {
34
45
if ( module . issuer && module . issuer . id ) {
35
- module . id = `${ module . issuer . id } ~${ module . id } ` ;
46
+ const requestShortener = new RequestShortener ( module . context ) ;
47
+ module . id = `${ module . id } ?${ getHash (
48
+ requestShortener . shorten ( module . identifier ( ) )
49
+ ) } `;
36
50
}
37
51
} ) ;
38
52
}
0 commit comments