美文网首页
webpack-代码分离

webpack-代码分离

作者: hsay | 来源:发表于2018-09-06 16:16 被阅读0次

使用webpack打包项目时一方面我们要防止单个文件太大,另一方面要防止文件碎片化,即打包文件太多,导致网络请求过多。所以合理的配置应该是兼顾打包文件的数量以及打包文件的个数。


what-is-webpack.png

代码分离 打包优化

在 webpack4版本之前,我们可以使用 CommonsChunkPlugin进行配置,在webpack4版本之后我们可以通过配置splitChunks来实现。splitChunks的配置选项如下:

  • chunks: 表示显示块的范围,有三个可选值:initial(初始块)、async(按需加载块)、all(全部块);
  • minSize: 表示在压缩前的最小模块大小;
  • minChunks: 表示被引用次数;
  • maxAsyncRequests: 最大的按需(异步)加载个数;
  • maxInitialRequests: 最大的初始化加载个数;
  • name: 拆分出来块的名字(Chunk Names),默认由块名和hash值自动生成;
  • cacheGroups: 缓存组。

对于缓存组是一个对象,除了可以有上面的chunks、minSize、minChunks、maxAsyncRequests、maxInitialRequests、name外,还有其他的一些参数:

如果不在缓存组中重新赋值,缓存组默认继承上面的选项,但是还有一些参数是必须在缓存组进行配置的。

  • priority: 表示缓存的优先级;
  • test: 缓存组的规则,表示符合条件的的放入当前缓存组,值可以是function、boolean、string、RegExp,默认为空;
  • reuseExistingChunk: 表示可以使用已经存在的块,即如果满足条件的块已经存在就使用已有的,不再创建一个新的块。

这里对cacheGroups有些不了解,其实其是对代码拆分进行细化配置的,比如说我想将某个特定的库单独打包,我就需要配置cacheGroups,通过test过滤出要单独打包的模块。

将第三方库的代码单独打包

optimization: {
    splitChunks: {           
      cacheGroups: {
        vendors: {
          chunks: 'initial', 
          test: /[\\/]node_modules[\\/]/,          
        }
      }
    }
  }

以上代码既可以将第三方代码单独打包。

需求:如果我的代码中使用了jquery vue lodash等第三方库,我想将这三个库分别打包进不同的文件(实际项目中不推荐,此处只用于测试),该如何设置呢?

  optimization:{
    splitChunks: {
      cacheGroups: {
        module1:{ // 键值可以自定义
          chunks:'initial', //
          test: /[\\/]node_modules[\\/]jquery/,
          name:'jquery',
       },
      module2:{
        chunks:'initial',
        test:/[\\/]node_modules[\\/]vue/,
        name:'_vue',
      },
    module3:{
      chunks:'initial',
      test:/[\\/]node_modules[\\/]lodash/,
      name:'loadash',
    }
  }
}

如上配置打包后的输出如下所示:


1.png

可以看出vue文件并没有如我们所愿打包出来,而是跟业务代码一起打包进了index.bundle.js文件,这是为什么呢?我们知道最大的初始化文件加载个数maxInitialRequests的默认值为3,也就是这个的默认值限制了vue文件的单独打包。我们做如下修改:

  optimization:{
    splitChunks: {
      maxInitialRequests: 4,
      cacheGroups: {
        module1:{ // 键值可以自定义
          chunks:'initial', //
          test: /[\\/]node_modules[\\/]jquery/,
          name:'jquery',
       },
      module2:{
        chunks:'initial',
        test:/[\\/]node_modules[\\/]vue/,
        name:'_vue',
      },
    module3:{
      chunks:'initial',
      test:/[\\/]node_modules[\\/]lodash/,
      name:'loadash',
    }
  }
}

如上配置打包后的输出如下所示:

2.png

manifest

若要将manifest单独打包,需要配置runtimeChunk选项。
runtimeChunk: {
name: 'page/manifest'
}

总结

webpack配置千千万,挨个试试又怎样。

相关文章

  • webpack-代码分离

    使用webpack打包项目时一方面我们要防止单个文件太大,另一方面要防止文件碎片化,即打包文件太多,导致网络请求过...

  • webpack-打包后代码分析

    转载自: http://echizen.github.io/tech/2019/03-17-webpack-bun...

  • 代码分离

    此特性能够把代码分离到不同的 bundle 中,然后可以按需加载或并行加载这些文件。代码分离可以用于获取更小的 b...

  • webpack 代码分离

    报错信息Error: webpack.optimize.CommonsChunkPlugin has been r...

  • Webpack 代码分离

    Webpack 代码分离 :pushpin: 提示:版本问题本文基于 webpack 2.x 版本。webpack...

  • CSS代码分离

    为了用webpack打包CSS文件,必须在在你的JavaScript代码中引入CSS文件, 并运用 css-loa...

  • java代码分离

    逐步完成

  • Spring Boot+Vue概述(一)

    前后端分离 前后端分离就是将⼀个应⽤的前端代码和后端代码分开写,为什么要这样做?如果不使⽤前后端分离的⽅式,会有哪...

  • 如何做好python项目的配置分离

    本文内容: 项目配置分离 为什么要分离 该怎么分离 配置合并 合并代码 分离 为什么要分离: 为区分正式和开发而分...

  • iOS 利用cocoapods进行本地组件化

    项目到了一定规模, 项目的代码组织和结构显得尤为重要. 重构项目结构, 可以从分离代码开始. 代码分离, 可以把常...

网友评论

      本文标题:webpack-代码分离

      本文链接:https://www.haomeiwen.com/subject/afmxgftx.html