开课吧全栈架构师第16期2020完结webpack day_第1页
开课吧全栈架构师第16期2020完结webpack day_第2页
开课吧全栈架构师第16期2020完结webpack day_第3页
开课吧全栈架构师第16期2020完结webpack day_第4页
开课吧全栈架构师第16期2020完结webpack day_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

wck性能优优化要发布到线上的代码,减少用户能感知到的加载时间提升代码性能,性能好,执行就快缩小文件范围优化loadertestincludeexclude三个配置缩小loader的处理范围include:include:path.resolve(dirname,优化resolve.modules配resolve.modules用于配置wck去哪 下寻找第模块,默认是寻找第模块,默认是在当前项 下的node_modules里面去找,如果没有找到,就会去上一../noe_oules找,再没有会去o_ous中找,以此类推,和Noe.js的模块寻找机制很类似。如果我们的第模块都安装在了项目 下,就可以直接指明这个路径modules:[path.resolve(dirname,}}优化resolve.alias配esolve.lias配置通过别名来将原导入路径映射成一个新的导入路径拿ect为例,我们引入的ect库,一般存在两套代码

采用commonJS规范的模已经打包好的完整代码,没有采用模块化,可以直接执行默认情况下,wck会从文件.noe_oein/ect/indx开始递归解析和处理依赖的文件。我们可以直接指定文件,避免这处的耗时。aliasalias:"@":path.join(dirname,"./pages"),react:path.resolve("react-dom":)}优化resolve.extensions配eolve.xtenions在导入语句没带文件后缀时,ck会自动带上后缀后,去尝试查找文件是否存在。导入语句尽量导入语句尽量的带上后缀使用externals优化cdn//公司有//静态资源有部署到cdn有//使用我的bundle文件里,就不用打包进去这个依赖了,体积会我们可以将一些JS文件在

上(减少 体积), 中通<!<!DOCTYPE<html<metacharset="UTF-<metaname="viewport"content="width=device-width,initial-<metahttp- patible" <div<script w我们希望在使用时,仍然可以通过 的方式去(如import$from'jquery'),并且希望不会对其进行打包,此时就可以配置externals。wmodule.exports=externals:{//jquery通过script引入之后,全局中即有了jQuery变量'jquery':'jQuery'}}DN通过将资源部署到世界各地,使得用户可以就近资源,加快速度。要接入CDN,需要把网页的静态资源上传到CDN服务上,在这些资源时,使用CDN服务提供的URL。publicPath:}',//指定存放JS文件的CDN地确保静态资源文件的上传与否css文件的使用less或者sass当做css$$npminstalllessless-loader--save-{test:use:["style-loader","css-loader","less-}使用postcss为样式自动补齐浏览器 npmnpmipostcss-loaderautoprefixer-modulemodule.exports{plugins:[overrideBrowserslist:["last2versions",]body{div y:flex;border:1pxredsolid;}}{test:include:path.resolve(dirname,"./src"),use:[{loader:"css-loader",options:{}]如果不做抽取配置,我们的css是直接打包进js里面的,我们希望能单独生成css文件。因为单独生成css,css可以和js并行,提高页面加载效率借助 tractPlugin完成npmnpminstallmini-css-extract-plugin-const tractPlugin=require("mini-css-extract-{test:/\.scss$/,use:[//"style-loader",//不再需要style-loader,用 代 "css-loader""css-loader"编译css"sass-loader"编译]plugins:new filename:"css/[name]_[contenthash:6].css",chunkFilename:"[id].css"]压缩借助optimize-css-assets-wck-借助####安npminstallcssnano-npmioptimize-css-assets- ck-plugin-constOptimizeCSSAssetsPlugin=require("optimize-css-assets-newcssProcessorrequire("cssnano"//引入cssnanocssProcessorOptions:ments:{removeAll:true}压缩借助html-wck-ckPlugin({tle:"京东商城 te:"./index.html",filename:"index.html",minify:{压缩HTMLments:true,//移除HTML中的注释collapseWhitespacetrue删除空白符与换行符minifyCSS:true//压缩内联css}npminstallnpminstallck-merge-案constconstmerge=constcommonConfig=require(" constdevConfig={}module.exports= ck-dev-server--config ck--config }基于环境变量区分借助cross-npmnpmicross-env-package里面配置命令,传入参"test":"cross-envNODE_ENV=testck--config在wck.config.js里拿到参module.exports=(env)=>{if(env&&duction){returnreturn}}scripts:"--treewck2.x开始支持treeshaking概念,顾名思义,"摇树",清除无用css,js(DeadDeadCode一般具有以下几个特征代码只会影响死变量(只写不读Jstreeshaking只支持ESmoduleCsstreenpmnpmiglob-allpurify-csspurifycss-ck--save-constPurifyCSS=require('purifycss-w constglob=require('glob-all')清除无用cssPurifyCSS({//要做CSSTreeShaking的路径文path.resolve(dirname'./src/*.html'请注意,我们同样需要对html文件进行treeshakingpath.resolve(dirname,JStreeexportconstadd=exportconstadd=(a,b){returna+exportconstminus=(a,b)=>{returna-b;import{add}fromadd(1,optimization:usedExports:true//哪些导出的模块被使用了,再做打}只要mode是pdo就会生效,dpmet的eeshkg是不生效的,因为wk为了方便你的调试可以查看打包后的代码注释以辨别是否生效//正常对所有模块进行tree,仅生产模式有效,需要或者在数组里面排除不需要treeshaking代码分割code单页面应用打包完后,所有页面只生成了一个没有合理利用浏览器资源多页面应用如果多个页面引入了一些公共模块,那么可以把这些公共的模块出来,单独打包。公共代码只需要一次就缓存起来了,避免了重复。importimport_from假如我们引入一个 的工具库,体积为1mb,而我们的业务逻辑代码也有1mb,那么打包出来的体积小会在 其实codeSplitting概念与wck并没有直接的关系,只不过wck中提供了一种更加方便的方法基于{splitChunks:chunks:"all",//所有的chunks代码公共的部分分离出来成为一{splitChunks:chunks:'async',//对同步initial,异步async,所有的模块有效allminSize:30000,//最小尺寸,当模块大于30kbmaxSize:0,//对模块进行二次分割时使用,不推荐minChunks:1,//打包生成的chunk文件最少有几个chunk了这个模块maxAsyncRequests:5,//最大异步请求数,默认5maxInitialRequests:ameDelimiter打包分割符nametrue,//打包后的名称,除了布尔值,还可以接收一个函数functioncacheGroups:{//缓存组vendors:test:/[\\/]node_modules[\\/]/,name:"vendor"要缓存的分隔出来的chunk名称priority:-10//缓存组优先级数字越大,优先级越高

chunks:"initial必须三选一:"initial"|"all"|"async"(默认test:/react|lodash正则规则验证,如果符合就提取chunk,minSizeminSize:minChunks:{minChunks:priority:-reuseExistingChunk:true//可设置是否重用该}}}}}}Scope作用域提升(ScopeHoisting)是指wck通过ES6语法的静态分析,分析出模块之间的依赖关exportdefault o,//importstrfrom 打包后 通过配置optimization.concatenateModules=true`:开启Scope////module.exports={{concatenateModules:}我们发现o.js内容和index.js的内容合并在一起了!所以通过ScopeHoisting的功能可以W 打包出来的代码文件更小、运行的更快speed-measure-wck-plugin:可以测量各个插件和loader所花费的时npmnpmispeed-measure-ck-plugin-constSpeedMeasurePlugin=require("speed-measure-constsmp=newconstconfig= }module.exports=wck-bundle-yzer:分析wck打包后的模块依赖关系npmnpminstallyzer-constyzerPlugin= module.exports=merge(baseW ckConfig,{new ]启动wck构建,会默认打开一个窗DllPlugin插件打包第类 优化构建性Dll动态库其实就是做缓.dll文件称为动态库,在windows系统会经常看到百科 项目中引入了很多第库,这些库在很长的一段时间内,基本不会更新,打包的时候分开打包来提升打包速度,而DllPlugin动态库插件,其原理就是把网页依赖的基础模块出来打包到dll文件中,当需要导入的模块存在于某个dll中时,这个模块不再被打包,而是去dll中获取。动态库只需要被编译一次,项目中用到的第模块,很稳定,例如ect,ectom,只要没有升级的需求wck已经内置了对动态库的支 用于在主要的配置文件中引入DllPlugin插件打包好的动态库文件新建wck.dll.config.js文件,打包基础模我们在index.js中使用了第库react、react-dom,接下来,我们先对这两个库先进行打包constconstpath=require("path");const{DllPlugin}=require("wmodule.exports={mode:entry:react:["react","react-dom"]//!output:path:path.resolve(dirname,"./dll"),filename:"[name].dll.js",library:plugins:new//manifest.json文件的输出位path:path.join(dirname,"./dll","[name]-//定义打包的公共vendor文件对外暴露的函数name:]在package.json"dev:dll":"dev:dll":ck--config运npmnpmrun你会发现多了一个dll文件夹,里边有dll.js文件,这样我们就把我们的Reactll文件包含了大量模块的代码,这些模块被存放在一个数组里。用数组的索引号为,通过变量讲自己暴露在全局中,就可以在wndxxx到其中的模块 描述了与其对应的dll.js包含了哪些模块,以及ID接下来怎么使用呢?要给web项目构建介入动态库,需要完成以下事情将网页依赖的基础模块,打包到单独的动态库,一个动态库是可以包含多个模块的当需要导入的模块存在于某个动态库中时,不要再次打包,直接使用构建好的动态库即可。newmanifest:path.resolve(dirname,"./dll/react-页面依赖的所有动态库都需要被加载<!DOCTYPE<!DOCTYPE<html<metacharset="UTF-8"<metaname="viewport"content="width=device-width,initial-scale=1.0"/><metahttp- patible"content="ie=edge" <linkhref="css/main_e2bf39.css"<div<scripttype="text/javascript"<scripttype="text/javascript"手动添加使用,体验不好,这里推荐使用add-asset-html-wck-plugin插件帮助我们做这个事情安装一个依赖npmiadd-asset-html-w ck-plugin,它会将我们打包后的dll.js文件注入到我们生成的index.html中.在wck.base.config.js文件中进行更改。newnewfilepath:path.resolve(dirname,'../dll/react.dll.js')//对应的dll运行npmnpmrun这个理解起来不费劲

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论