详解用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 相关文章推荐
javascript实现禁止右键和F12查看源代码
Dec 26 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
Mar 24 Javascript
Javascript基础知识盲点总结之函数
May 15 Javascript
switch语句的妙用(必看篇)
Oct 03 Javascript
js实现弹窗居中的简单实例
Oct 09 Javascript
Vue组件选项props实例详解
Aug 18 Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
vue-content-loader内容加载器的使用方法
Aug 05 Javascript
如何在Vue中抽离接口配置文件
Oct 31 Javascript
mpvue 项目初始化及实现授权登录的实现方法
Jul 20 Javascript
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
Apr 11 Vue.js
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
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
PHP实现的简单网络硬盘
2015/07/29 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
js读写json文件实例代码
2014/10/21 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
tensorflow 实现数据类型转换
2020/02/17 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
keras中的History对象用法
2020/06/19 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
平民服装店创业计划书
2014/01/17 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
微信小程序调用python模型
2022/04/21 Python