Webpack 2.0.1

352 阅读3分钟

webpack 2.0.0 juejin.cn/post/684490…

通过对webpack2.0.0的配置和操作,'摇树’的概念,已经非常清晰了。而即使通过‘摇树’来把未使用的方法或者变量在打包时忽略掉,而为了提升开发效率,项目中通常会引入第三方的类库。最后做打包时会只生成一个JS文件。当项目中业务逻辑代码量庞大时,打包生成的JS文件即使压缩后依然会过大。最终项目上线时导致加载页面时间过长,用户体验会大打折扣。

webpack -code splitting

code splitting 解决了上述问题。weback4已经很方便的提供了code splitting的配置项optimization。


chunks    //配置为 all,对所有引用的类库做代码分割。 ⚠️

⚠️ code splitting的概念在webpack外依然存在,和webpack没有任何关系,只是webpack引入了代码分割机制。

⚠️optimization配置的code splitting 代码分割只对同步代码有效。

⚠️异步代码,即使不配置 splictChunks,在webpack中也会生效。webpack会自动分割,比如用ES Module 异步引入的方式。

webpack - split chunks plugin

webpack底层使用了split chunks plugin 这个插件。

webpack官方推荐的split chunks plugin插件配置参数如下:⚠️


⚠️  在optimization中即使配置splitchunks为一个空对象,webpack还会执行如上图的默认配置。默认配置不支持同步。

chunks                              //默认为异步引入。all为异步/同步都对代码进行切割。

minsize                              //大于30kb才切割

minchunks                          //至少引用过一次才会进行切割

maxAsyncRequesrs            //同时加载的类库数量,默认即可。

maxinitialRequests              //入口文件加载的类库(首页),默认即可。

automaticNameDelimiter    //链接符号

name                                     //cacheGroups自定义名称是否有效。

cacheGroups                        //缓存组

vendors                                 //vendors缓存组

test                                         //打包文件位置

proority                                  //优先级,vendors -10高于default -20。

reuseExistingChunk              // 已经打包的模块忽略,直接使用之前被打包的模块。


⚠️扩展

1.只打包动态引入的类库时,会发现打包后生成的文件名称为下标。修改就需要下载一个动态引入组件的插件。

终端下载 npm install --save-dev @babel/plugin-syntax-dynamic-import;下载动态引入组件的插件。此插件支持魔法注释。

在.babelrc中写入,{ "plugins": ["@babel/plugin-syntax-dynamic-import"] }


使用官方示例,并写入魔法注释:


并且修改缓存组配置参数


2.只打包静态引入类库:


使用filename进行自定义名称。

⚠️以上不能混合使用。

一个项目中,都可能会使用到动态和静态引入,所以以上两种单独配置打包的方式都不适合于工程项目中,但魔法注释的配置可以保留,这样你会发现,不管是打包动态引入的类库还是静态引入的类库,更改的都是链接符后面的名称。这是因为打包静态类库时,类库符合vendors的配置规则,而入口为main.js。打包动态引入的类库时,使用魔法注释,把名称修改为lodash,但也符合vendors的配置规则。

我的配置为chunks:'all'  + 魔法注释。其他为默认配置项。