保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
    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;