UNPKG

1.47 kBJavaScriptView Raw
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5"use strict";
6
7const createHash = require("./util/createHash");
8const RequestShortener = require("./RequestShortener");
9
10const getHash = str => {
11 const hash = createHash("md4");
12 hash.update(str);
13 return hash.digest("hex").substr(0, 4);
14};
15
16class NamedModulesPlugin {
17 constructor(options) {
18 this.options = options || {};
19 }
20
21 apply(compiler) {
22 compiler.hooks.compilation.tap("NamedModulesPlugin", compilation => {
23 compilation.hooks.beforeModuleIds.tap("NamedModulesPlugin", modules => {
24 const namedModules = new Map();
25 const context = this.options.context || compiler.options.context;
26
27 for (const module of modules) {
28 if (module.id === null && module.libIdent) {
29 module.id = module.libIdent({ context });
30 }
31
32 if (module.id !== null) {
33 const namedModule = namedModules.get(module.id);
34 if (namedModule !== undefined) {
35 namedModule.push(module);
36 } else {
37 namedModules.set(module.id, [module]);
38 }
39 }
40 }
41
42 for (const namedModule of namedModules.values()) {
43 if (namedModule.length > 1) {
44 for (const module of namedModule) {
45 const requestShortener = new RequestShortener(context);
46 module.id = `${module.id}?${getHash(
47 requestShortener.shorten(module.identifier())
48 )}`;
49 }
50 }
51 }
52 });
53 });
54 }
55}
56
57module.exports = NamedModulesPlugin;