zoukankan      html  css  js  c++  java
  • webpack学习:minicssextractplugin,SplitChunksPlugin源码学习

    mini-css-extract-plugin 是用来把所有css提取打包成一个文件的插件,uni把vue文件的css打包成wxss文件就是使用此插件完成的。这个插件还内置了一个处理css的loader

    mini-css-extract-plugin的loader作用

    位置在mini-css-extract-plugin/dist/loader,该loader只有一个pitch函数,每一个css文件走到picth时都会通过createChildCompiler方法创建了一个childCompiler,childCompiler会把其他的css相关loader走一遍,
    然后返回结果通过addDependencies方法,在module里面新加入了一个cssModule

    mini-css-extract-plugin

    主要操作在renderManifest钩子里,新增了一个Manifest,render方法的核心在renderContentAsset,该方法把每一个chunk里的cssModule内容合并成一个然后返回,剩下的就交给webpack把返回回来的source变成文件,然后html-webpack-plugin把所有的文件放到一个html里。

    该插件配合uni把vue打包成小程序存在一个问题:extract插件有2个关于mainTemplate钩子是用来处理异步加载的css的。会在runtime.js里面存储所有异步的组件路径,等异步chunk加载时会把异步chunk的css一起加载,本身是没有问题的,但是配合uni使用有2个问题

    1 小程序是通过包来加载的,所以相关的异步代码并没有执行,也就是说runtime.js里存在没有使用的代码,还占了主包的体积。
    2 uni把所有组件的引用都改为异步引用,其实这是没必要的,第一点说了,小程序是一个包一起加载好的。
    2点加起来导致来主包变大,我公司的就占据了70kb!!!。

    SplitChunksPlugin作用大家都知道,它是如何拆分成2个chunk的我比较好奇所以去研究了下

    SplitChunksPlugin 如何拆分chunk的

    // 生成一个新chunk
    newChunk = compilation.addChunk(chunkName);
    
    // usedChunks 是使用这个多余module的chunks
    // Walk through all chunks
    for (const chunk of usedChunks) {
      // Add graph connections for splitted chunk  把新生成的chunk插入到使用它的chunk的chunkgroup里
      chunk.split(newChunk);
    }
    // Add all modules to the new chunk 把有关的module都从旧的chunk里删除,添加到新的chunk里
    for (const module of item.modules) {
    	if (typeof module.chunkCondition === "function") {
    		if (!module.chunkCondition(newChunk)) continue;
    	}
    	// Add module to new chunk
    	GraphHelpers.connectChunkAndModule(newChunk, module);
    	// Remove module from used chunks
    	for (const chunk of usedChunks) {
    		chunk.removeModule(module);
    		module.rewriteChunkInReasons(chunk, [newChunk]);
    	}
    }
    
  • 相关阅读:
    JavaScript var,let,const三个关键字的区别
    nuxt head 配置
    阿里云MySQL安装到centos,并链接。
    js Array 的所有方法
    关于手机某些字体显是不全
    关于设备与canvas画不出来的解决办法
    关于github 新工程上传代码 git 命令
    高德地图3D菱形 区域点击搜索
    高德地图行政区域划分(西安)
    vue2获取dom节点
  • 原文地址:https://www.cnblogs.com/wzcsqaws/p/15646514.html
Copyright © 2011-2022 走看看