| 
									
										
										
										
											2015-11-30 03:16:01 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2017-01-02 01:26:22 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HashedModuleIdsPlugin { | 
					
						
							|  |  |  | 	constructor(options) { | 
					
						
							|  |  |  | 		this.options = Object.assign({ | 
					
						
							|  |  |  | 			hashFunction: "md5", | 
					
						
							|  |  |  | 			hashDigest: "base64", | 
					
						
							|  |  |  | 			hashDigestLength: 4 | 
					
						
							|  |  |  | 		}, options); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	apply(compiler) { | 
					
						
							|  |  |  | 		const options = this.options; | 
					
						
							|  |  |  | 		compiler.plugin("compilation", (compilation) => { | 
					
						
							|  |  |  | 			const usedIds = new Set(); | 
					
						
							|  |  |  | 			compilation.plugin("before-module-ids", (modules) => { | 
					
						
							|  |  |  | 				modules.forEach((module) => { | 
					
						
							|  |  |  | 					if(module.id === null && module.libIdent) { | 
					
						
							|  |  |  | 						let id = module.libIdent({ | 
					
						
							|  |  |  | 							context: this.options.context || compiler.options.context | 
					
						
							|  |  |  | 						}); | 
					
						
							|  |  |  | 						const hash = require("crypto").createHash(options.hashFunction); | 
					
						
							|  |  |  | 						hash.update(id); | 
					
						
							|  |  |  | 						id = hash.digest(options.hashDigest); | 
					
						
							|  |  |  | 						let len = options.hashDigestLength; | 
					
						
							|  |  |  | 						while(usedIds.has(id.substr(0, len))) | 
					
						
							|  |  |  | 							len++; | 
					
						
							|  |  |  | 						module.id = id.substr(0, len); | 
					
						
							|  |  |  | 						usedIds.add(module.id); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-11-30 03:16:01 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2017-01-02 01:26:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-30 03:16:01 +08:00
										 |  |  | module.exports = HashedModuleIdsPlugin; |