详解用webpack的CommonsChunkPlugin提取公共代码的3种方式


Posted in Javascript onNovember 09, 2017

Webpack 的 CommonsChunkPlugin 插件,负责将多次被使用的 JS 模块打包在一起。

CommonsChunkPlugin 能解决的问题

在使用插件前,考虑几个问题:

  1. 对哪些 chunk 进行提取,这决定了 chunks ,children 和 name 要怎么配置
  2. common chunk 是否异步,这决定了 async 怎么配置
  3. common chunk 的粒度,这决定了 minChunks 和 minSize 怎么配置

以下是官方给出的常用的场景:

  1. 提取两个及两个以上 Chunk 的公共代码
  2. 将 Code Split 切割出来的 Chunk「就是子 Chunk」,提取到父 Chunk
  3. 将 Code Split 切割出来的 Chunk,提取到一个新的异步加载的 Chunk
  4. 提取某个类似 jquery 或 react 的代码库

前面我们实现了 多页面分离资源引用,按需引用JS和css

但有一个问题:最后生成的3个js,都有重复代码,我们应该把这部分公共代码单独提取出来。

方式一,传入字符串参数

new webpack.optimize.CommonsChunkPlugin(‘common.js'), // 默认会把所有入口节点的公共代码提取出来,生成一个common.js

var HtmlWebpackPlugin = require('html-webpack-plugin');
var webpack = require('webpack');

var extractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
  // entry是入口文件,可以多个,代表要编译那些js
  //entry:['./src/main.js','./src/login.js','./src/reg.js'],

  entry:
  {
    'main':'./src/main.js',
    'user':['./src/login.js','./src/reg.js'],
    'index':['./src/index.js']
  },

  externals:{
    'jquery':'jQuery'
  },

  module:{
    loaders:[
      // {test:/\.css$/,loader:'style-loader!css-loader'},
      {test:/\.css$/,loader:extractTextPlugin.extract('style','css')}
    ],
  },

  output:{
    path: __dirname+'/build/js', // 输出到那个目录下(__dirname当前项目目录)
    filename:'[name].js' //最终打包生产的文件名
  },

  plugins:[
    new HtmlWebpackPlugin({
      filename: __dirname+'/build/html/login-build.html',
      template:__dirname+'/src/tpl/login.html',
      inject:'body',
      hash:true,
      chunks:['main','user','common.js']  // 这个模板对应上面那个节点
    }),

    new HtmlWebpackPlugin({
      filename: __dirname+'/build/html/index-build.html',
      template:__dirname+'/src/tpl/index.html',
      inject:'body',
      hash:true,
      chunks:['index','common.js']  // 这个模板对应上面那个节点
    }),

    // css抽取
    new extractTextPlugin("[name].css"),

    // 提供公共代码
    new webpack.optimize.CommonsChunkPlugin('common.js'), // 默认会把所有入口节点的公共代码提取出来,生成一个common.js
  ]
};

方式二,有选择的提取公共代码

// 提供公共代码
// 默认会把所有入口节点的公共代码提取出来,生成一个common.js
// 只提取main节点和index节点
new webpack.optimize.CommonsChunkPlugin('common.js',['main','index']),

方式三,有选择性的提取(对象方式传参)

推荐

new webpack.optimize.CommonsChunkPlugin({
      name:'common', // 注意不要.js后缀
      chunks:['main','user','index']
    }),

通过CommonsChunkPlugin,我们把公共代码专门抽取到一个common.js,这样业务代码只在index.js,main.js,user.js

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
浏览器加载、渲染和解析过程黑箱简析
Nov 29 Javascript
jquery实现商品拖动选择效果代码(自写)
May 28 Javascript
Express.JS使用详解
Jul 17 Javascript
js实现的倒计时按钮实例
Jun 24 Javascript
ajax接收后台数据在html页面显示
Feb 19 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
Apr 05 Javascript
vue中appear的用法
Aug 17 Javascript
vue iview组件表格 render函数的使用方法详解
Mar 15 Javascript
基于vue-video-player自定义播放器的方法
Mar 21 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
Aug 07 Javascript
react.js组件实现拖拽复制和可排序的示例代码
Aug 20 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
Angularjs渲染的 using 指令的星级评分系统示例
Nov 09 #Javascript
jQuery实现动态添加节点与遍历节点功能示例
Nov 09 #jQuery
简单实现jquery隔行变色
Nov 09 #jQuery
基于Datatables跳转到指定页的简单实例
Nov 09 #Javascript
浅谈vue2 单页面如何设置网页title
Nov 08 #Javascript
jQuery实现的简单无刷新评论功能示例
Nov 08 #jQuery
js使用xml数据载体实现城市省份二级联动效果
Nov 08 #Javascript
You might like
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
Javascript hasOwnProperty 方法 & in 关键字
2008/11/26 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
微信小程序链接传参并跳转新页面
2016/11/29 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
Python open读写文件实现脚本
2008/09/06 Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
python使用RNN实现文本分类
2018/05/24 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
abstract是什么意思
2012/02/12 面试题
设计模式的基本要素是什么
2014/04/21 面试题
大一学生的职业生涯规划书范文
2014/01/19 职场文书
优秀教师工作感言
2014/02/16 职场文书
毕业生工作求职信
2014/06/30 职场文书
代办委托书怎么写
2014/08/01 职场文书
综合素质自我评价评语
2015/03/06 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android