WEB前端程序开发web前端

webpack.optimize.CommonsChunkPlu

2018-12-25  本文已影响60人  异彩_c7a6

明确概念

使用场景

  1. 多入口文件,需要抽出公告部分的时候。
  2. 单入口文件,但是因为路由异步加载对多个子chunk, 抽离子每个children公共的部分。
  3. 把第三方依赖,理由node_modules下所有依赖抽离为单独的部分。
  4. 混合使用,既需要抽离第三方依赖,又需要抽离公共部分。

实现部分

项目结构


image.png
 // a.js
 import { common1 } from './common'
 import $ from 'jquery';
 console.log(common1, 'a')

  //b.js
  import { common1 } from './common'
  import $ from 'jquery';
  console.log(common1, 'b')

  //common.js
  export const common1 = 'common1'
  export const common2 = 'common2'

在不使用插件的前提下打包结果如下:


image.png

case 1 把多入口entry抽离为common.js

  plugins: [
    new webpack.optimize.CommonsChunkPlugin({
      name: "common",
      filename: "common.js"
    })
  ]

执行结果如下:


image.png

case 2 从children chunk抽离 common.js

// 单入口文件 main.js
const component1 = function(resolve) {
  return require(['./a'], resolve)
}
const component2 = function(resolve) {
  return require(['./b'], resolve)
}
console.log(component1, component2, $, 'a')

不使用commonChunk执行结果如下:


image.png
 //使用commonChunk 配置如下
  plugins: [
    new webpack.optimize.CommonsChunkPlugin({
      children: true,
      async: 'children-async',
      name: ['main']
    })
  ]

// 执行结果如下


image.png

case 3 node_modules所有额三方依赖抽离为vendor.js

//webpack 配置
...
  entry : {
    main: './src/main.js',
    vendor: ['jquery']
  }
...
...
    new webpack.optimize.CommonsChunkPlugin({
      name: 'vendor',  // 这里是把入口文件所有公共组件都合并到 vendor模块当中
      filename: '[name].js'
    })
...

执行结果如果下:


image.png

case 4 case 2和case 3混合使用 vendor.js是三方依赖提取,0.js是children公共部分提取

....
  plugins: [
    new webpack.optimize.CommonsChunkPlugin({
      name:  'vendor',
      filename: '[name].js'
    }),
    new webpack.optimize.CommonsChunkPlugin({
      children: true,
      async: 'children-async',
      name: ['main']
    })
  ]
....

执行结果如下:


image.png

github 源码下载

注意的几点

上一篇 下一篇

猜你喜欢

热点阅读