You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/* MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra */ "use strict";
const createHash = require("./util/createHash"); const RequestShortener = require("./RequestShortener");
const getHash = str => { const hash = createHash("md4"); hash.update(str); const digest = /** @type {string} */ (hash.digest("hex")); return digest.substr(0, 4); };
class NamedModulesPlugin { constructor(options) { this.options = options || {}; }
apply(compiler) { compiler.hooks.compilation.tap("NamedModulesPlugin", compilation => { compilation.hooks.beforeModuleIds.tap("NamedModulesPlugin", modules => { const namedModules = new Map(); const context = this.options.context || compiler.options.context;
for (const module of modules) { if (module.id === null && module.libIdent) { module.id = module.libIdent({ context }); }
if (module.id !== null) { const namedModule = namedModules.get(module.id); if (namedModule !== undefined) { namedModule.push(module); } else { namedModules.set(module.id, [module]); } } }
for (const namedModule of namedModules.values()) { if (namedModule.length > 1) { for (const module of namedModule) { const requestShortener = new RequestShortener(context); module.id = `${module.id}?${getHash( requestShortener.shorten(module.identifier()) )}`;
} } } }); }); } }
module.exports = NamedModulesPlugin;
|