mirror of https://github.com/webpack/webpack.git
35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
/*
|
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
Author Tobias Koppers @sokra
|
|
*/
|
|
function HashedModuleIdsPlugin(options) {
|
|
this.options = options || {};
|
|
this.options.hashFunction = this.options.hashFunction || "md5";
|
|
this.options.hashDigest = this.options.hashDigest || "base64";
|
|
this.options.hashDigestLength = this.options.hashDigestLength || 4;
|
|
}
|
|
module.exports = HashedModuleIdsPlugin;
|
|
HashedModuleIdsPlugin.prototype.apply = function(compiler) {
|
|
var options = this.options;
|
|
compiler.plugin("compilation", function(compilation) {
|
|
var usedIds = {};
|
|
compilation.plugin("before-module-ids", function(modules) {
|
|
modules.forEach(function(module) {
|
|
if(module.id === null && module.libIdent) {
|
|
var id = module.libIdent({
|
|
context: this.options.context || compiler.options.context
|
|
});
|
|
var hash = require("crypto").createHash(options.hashFunction);
|
|
hash.update(id);
|
|
id = hash.digest(options.hashDigest);
|
|
var len = options.hashDigestLength;
|
|
while(usedIds[id.substr(0, len)])
|
|
len++;
|
|
module.id = id.substr(0, len);
|
|
usedIds[module.id] = true;
|
|
}
|
|
}, this);
|
|
}.bind(this));
|
|
}.bind(this));
|
|
};
|