index.js 1.37 KB
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;