保誠-保戶業務員媒合平台
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
    MIT License http://www.opensource.org/licenses/mit-license.php
    Author Tobias Koppers @sokra
*/
"use strict";
 
const path = require("path");
const asyncLib = require("neo-async");
const SingleEntryDependency = require("./dependencies/SingleEntryDependency");
 
class LibManifestPlugin {
    constructor(options) {
        this.options = options;
    }
 
    apply(compiler) {
        compiler.hooks.emit.tapAsync(
            "LibManifestPlugin",
            (compilation, callback) => {
                asyncLib.forEach(
                    compilation.chunks,
                    (chunk, callback) => {
                        if (!chunk.isOnlyInitial()) {
                            callback();
                            return;
                        }
                        const targetPath = compilation.getPath(this.options.path, {
                            hash: compilation.hash,
                            chunk
                        });
                        const name =
                            this.options.name &&
                            compilation.getPath(this.options.name, {
                                hash: compilation.hash,
                                chunk
                            });
                        const manifest = {
                            name,
                            type: this.options.type,
                            content: Array.from(chunk.modulesIterable, module => {
                                if (
                                    this.options.entryOnly &&
                                    !module.reasons.some(
                                        r => r.dependency instanceof SingleEntryDependency
                                    )
                                ) {
                                    return;
                                }
                                if (module.libIdent) {
                                    const ident = module.libIdent({
                                        context: this.options.context || compiler.options.context
                                    });
                                    if (ident) {
                                        return {
                                            ident,
                                            data: {
                                                id: module.id,
                                                buildMeta: module.buildMeta
                                            }
                                        };
                                    }
                                }
                            })
                                .filter(Boolean)
                                .reduce((obj, item) => {
                                    obj[item.ident] = item.data;
                                    return obj;
                                }, Object.create(null))
                        };
                        // Apply formatting to content if format flag is true;
                        const manifestContent = this.options.format
                            ? JSON.stringify(manifest, null, 2)
                            : JSON.stringify(manifest);
                        const content = Buffer.from(manifestContent, "utf8");
                        compiler.outputFileSystem.mkdirp(path.dirname(targetPath), err => {
                            if (err) return callback(err);
                            compiler.outputFileSystem.writeFile(
                                targetPath,
                                content,
                                callback
                            );
                        });
                    },
                    callback
                );
            }
        );
    }
}
module.exports = LibManifestPlugin;