Blame view

node_modules/webpack-mpvue-asset-plugin/index.js 1.37 KB
ce4c83ff   wxy   初始提交
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
  function MpvuePlugin() {}
  
  MpvuePlugin.prototype.apply = function(compiler) {
    const {options: {entry, plugins}} = compiler;
    compiler.plugin('emit', function(compilation, callback) {
      let commonsChunkNames = [];
      // 获取所有的 chunk name
      plugins.forEach(item => {
        let { chunkNames } = item;
        if (item.constructor.name === 'CommonsChunkPlugin' && chunkNames) {
          commonsChunkNames = commonsChunkNames.concat(chunkNames);
        }
      })
      let pages = Object.keys(entry);
      compilation.chunks.forEach(commonChunk => {
        const { files, chunks: childChunks, name } = commonChunk;
        let commonWxssFile = files.find(item => item.endsWith('.wxss'));
        
        if (commonsChunkNames.indexOf(name) > -1 && commonWxssFile) {
          childChunks.forEach(item => {
            let wxssFile = item.files.find(item => item.endsWith('.wxss'));
            if (item.name === 'app' && wxssFile) { // 过滤 app
              return;
            }
            try {
              if (compilation.assets[wxssFile]) {
                let wxss = compilation.assets[wxssFile].source();
                wxss = `@import "/${commonWxssFile}";\n${wxss}`;
                compilation.assets[wxssFile].source = () => wxss;
              }
            } catch (error) {
              console.error(error, wxssFile)
            }
          })
        }
      });
      callback();
    });
  };
  
  module.exports = MpvuePlugin;