保誠-保戶業務員媒合平台
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
const pluginCompat = require('./util/plugin-compat');
 
const mixinCssDependency = function(CssDependency) {
  const Dependency = Object.getPrototypeOf(CssDependency.prototype).constructor;
  CssDependency.prototype.updateHash = function(hash) {
    Dependency.prototype.updateHash.call(this, hash);
    hash.update(this.content);
  };
};
 
class SupportMiniCssExtractPlugin {
  apply(compiler) {
    let CssDependency;
 
    pluginCompat.tap(
      compiler,
      'make',
      'SupportMiniCssExtractPlugin',
      ({ dependencyFactories }) => {
        const Dependencies = dependencyFactories.keys();
        for (const Dep of Dependencies) {
          if (Dep.name === 'CssDependency') {
            CssDependency = Dep;
            mixinCssDependency(CssDependency);
            break;
          }
        }
      },
    );
 
    pluginCompat.tap(
      compiler,
      '_hardSourceFreezeDependency',
      'HardMiniCssExtractPlugin freeze',
      (frozen, dependency, extra) => {
        if (dependency.constructor === CssDependency) {
          return {
            type: 'CssDependency',
            line: {
              identifier: dependency.identifier,
              content: dependency.content,
              media: dependency.media,
              sourceMap: dependency.sourceMap,
            },
            context: dependency.context,
            identifierIndex: dependency.identifierIndex,
          };
        }
        return frozen;
      },
    );
 
    pluginCompat.tap(
      compiler,
      '_hardSourceThawDependency',
      'HardMiniCssExtractPlugin',
      (dependency, { type, line, context, identifierIndex }, extra) => {
        if (type === 'CssDependency') {
          return new CssDependency(line, context, identifierIndex);
        }
        return dependency;
      },
    );
  }
}
 
module.exports = SupportMiniCssExtractPlugin;