详解用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 相关文章推荐
ext 代码生成器
Aug 07 Javascript
JS解决url传值出现中文乱码的另类办法
Apr 08 Javascript
Jquery api 速查表分享
Jan 12 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
Mar 10 Javascript
jQuery实现预加载图片的方法
Mar 17 Javascript
JQuery datepicker 用法详解
Dec 25 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
Nov 26 Javascript
EasyUI为Numberbox添加blur事件的方法
Mar 05 Javascript
JS简单验证上传文件类型的方法
Apr 17 Javascript
JavaScript 巧学巧用
May 23 Javascript
underscore之function_动力节点Java学院整理
Jul 11 Javascript
详解JavaScript数据类型和判断方法
Sep 04 Javascript
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
PHP 程序授权验证开发思路
2009/07/09 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
PHP过滤★等特殊符号的正则
2014/01/27 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
Javascript中的相等与不等运算
2010/04/25 Javascript
js获取视频时长代码
2014/04/10 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
JS验证码实现代码
2017/09/14 Javascript
JavaScript实现重力下落与弹性效果的方法分析
2017/12/20 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
朴素贝叶斯Python实例及解析
2018/11/19 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
物业门卫岗位职责
2013/12/28 职场文书
管理专员自荐信
2014/01/26 职场文书
七年级历史教学反思
2014/02/05 职场文书
运动会闭幕词
2015/01/28 职场文书
教师岗位说明书
2015/09/30 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android