博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Webpack4 splitChunks配置,代码分离逻辑
阅读量:4504 次
发布时间:2019-06-08

本文共 3275 字,大约阅读时间需要 10 分钟。

博客不知道啥时候写的了,一直在草稿箱没写完,突然感觉今年过去大半了,又没怎么写博客。写写完,有始有终

     1.代码分离升级

      原来项目代码分离是通过下面的配置,基于bundle-loader插件,通过router.jsx的配置进行代码分离,js文件的名字根据[name].router.jsx生成。

{            test: /\.router\.jsx/,            loader: [                'bundle-loader?lazy&name=[1]&regExp=([^\\\\\\/]*)\\.router\\.jsx',                'babel-loader',            ],            exclude: /node_modules|assets/        }

     升级方案采用react-loadable + import 方式,以组件为单位进行代码分离,需要打包在一起的话,webpackChunkName配置成同一个名字就行。

component: Loadable({        loader: () => import(/* webpackChunkName: "name" */ 'MODULES/component/index.jsx'),        loading    }),

  2.实际项目中,根据上面的配置还是会有一些问题,有些库包会比较大,如果一起打包的话会导致文件过大,所以应该利用浏览器的并发数,把大文件拆开来,webpack4主要使用的是splitChunks配置,下面是项目中的配置

splitChunks: {            maxAsyncRequests: 6,            cacheGroups: {                brace: {                    name: 'brace',                    chunks: 'all',                    priority: 10,                    test: getTestFn(function(name) {                        const reg = new RegExp(/brace/);                        if (                            name.indexOf('/components/ace/') !== -1 ||                            name.indexOf('/components/sql-formatter/') !== -1 ||                            name.indexOf('/node_modules/react-ace/') !== -1                        ) {                            return true;                        }                        return reg.test(name);                    })                },                echarts: {                    name: 'echarts',                    chunks: 'all',                    priority: 10,                    test: /echarts|zrender/                },                libs: {                    name: 'libs',                    chunks: 'all',                    priority: 9,                    test: getTestFn(function(name) {                        const reg = new RegExp(/babel-polyfill|\/react\/|react-dom|react-router-dom|mobx|lodash/);                        return reg.test(name);                    })                },                styles: {                    name: 'styles',                    test: /\.(less|css|scss)$/,                    chunks: 'async',                    minChunks: 1,                    reuseExistingChunk: true,                    enforce: true,                    priority: 8                },                async: {                    name: 'async',                    chunks: 'async',                    minChunks: 2,                    reuseExistingChunk: true,                    priority: 7                },                default: false,                vendors: false            }        }

里面有些字段需要说明下(可能有误差,欢迎指正)

chunks:"initial" 初始化,我认为就是entry的配置

              "async"异步,相当于import异步拆分打包的内容

              "all": 所有

priority: 优先级,数值越大,越先执行

minChunks: 引用次数大于这个值进行打包

打包优化思路,

  a.先把大的库单独打包,如代码编辑器ace,图标可视化echarts,这边我通过test设置为函数,把一些编辑器相关的也一同打包

  b.把一些不怎么会改,升级的基础库进行打包,libs配置

  c.把一些公共代码进行打包。async的配置。需要注意minChunks: 2,这个配置就是上面打包完成剩下的文件中,如果有超过2个地方引用的就会打包进async.js,这个配置minChunks到底填几就看实际场景了

      d.vendors和default是默认配置,下面就是相关的配置,vendors是把node_modules打包一起,default是把重复代码打包,自己配置很详细的情况下,就应该禁用掉

vendors: {     test: /[\\/]node_modules[\\/]/,     priority: -10 }, default: {     minChunks: 2,     priority: -20,     reuseExistingChunk: true }

 

转载于:https://www.cnblogs.com/legu/p/10491315.html

你可能感兴趣的文章
freemarker 数字,字符的操作
查看>>
linux 文件目录类的指令 包含查找
查看>>
如何进行git 的push操作
查看>>
Scala入门系列(四):Map & Tuple
查看>>
uni-app中onLoad不起作用
查看>>
多线程概述
查看>>
Linux_ubuntu命令-用户、权限管理
查看>>
Knowladge_网站学习_RSS 学习
查看>>
TCP/IP,Web世界的基本规则
查看>>
c++ 子类构造函数初始化及父类构造初始化
查看>>
Analysis on Human Various Emotional Expression
查看>>
DataGridView DataGridViewCheckBoxColumn编辑时实时触发事件
查看>>
SharePoint 2010 工作流解决方案:创建和调试 SharePoint 工作流解决方案
查看>>
第二周任务分配
查看>>
SignalR---服务端
查看>>
PlayerPrefs存储Vector3等结构数据
查看>>
LightOJ - 1422 Halloween Costumes (区间DP)
查看>>
OPENWRT 支持git
查看>>
Union & Find 并查集的实现
查看>>
Memcached 查看帮助
查看>>