详解用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 相关文章推荐
从父页面读取和操作iframe中内容方法
Jul 25 Javascript
JQuery的Validation插件中Remote验证的中文问题
Jul 26 Javascript
jquery dialog键盘事件代码
Aug 01 Javascript
js保留两位小数使用toFixed实现
Jul 29 Javascript
JS滚轮事件onmousewheel使用介绍
Nov 01 Javascript
node.js中的fs.futimesSync方法使用说明
Dec 17 Javascript
jquery实现上下左右滑动的方法
Feb 09 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
Dec 13 Javascript
批量下载对路网图片并生成html的实现方法
Jun 07 Javascript
详解JavaScript跨域总结与解决办法
Oct 31 Javascript
webpack4 从零学习常用配置(小结)
May 28 Javascript
Elasticsearch实现复合查询高亮结果功能
Sep 10 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
PHP脚本数据库功能详解(下)
2006/10/09 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
斜45度寻路实现函数
2009/08/20 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
清除div下面的所有标签的方法
2014/02/17 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
提升jQuery的性能需要做好七件事
2016/01/11 Javascript
详解vue组件基础
2018/05/04 Javascript
vue filters的使用详解
2018/06/11 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
angular组件间通讯的实现方法示例
2020/05/07 Javascript
Python实现的几个常用排序算法实例
2014/06/16 Python
Python 12306抢火车票脚本
2018/02/07 Python
对numpy中二进制格式的数据存储与读取方法详解
2018/11/01 Python
pytorch permute维度转换方法
2018/12/14 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
龟牌英国商店:Turtle Wax Brand Store UK
2019/07/02 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
英国行业制服供应商:Alexandra
2019/09/14 全球购物
物业管理计划书
2014/01/10 职场文书
教师自我鉴定范文
2014/03/20 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
电工实训报告总结
2014/11/05 职场文书