• 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]);
    	}
    }
    
  • 相关阅读:
    《如何评价Kaiming He的Momentum Contrast for Unsupervised?》
    多伦多大学&NVIDIA最新成果:图像标注速度提升10倍!
    GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!
    上Github,北大、清华、浙大、中科大4大名校课程在线学,加星总数超1.8万
    使用Python+OpenCV进行图像处理(二)| 视觉入门
    重磅!刷新两项世界纪录的腾讯优图人脸检测算法DSFD开源了!
    巴黎不哭!十亿数据精准扫描,帮卡西莫多重新找回他的玫瑰花窗
    机器学习算法系列:FM分解机
    百道Python面试题实现,搞定Python编程就靠它
    学习GAN必须阅读的10篇论文
  • 原文地址:https://www.cnblogs.com/wzcsqaws/p/15646514.html
Copyright © 2020-2023  润新知