详解webpack打包第三方类库的正确姿势


Posted in Javascript onOctober 20, 2018

webpack 的使用越来越广泛,但其中不乏很多鲜为人知的细节设置,甚至很多人会认为这是 webpack 的 bug。这次,我们就来聊一聊 webpack.optimize.CommonsChunkPlugin。

这个 plugin 我相信几乎90%的用 webpack 的都用了这个,但我同样相信几乎 90% 的用了这个 plugin 的人都没有正确的使用。

entry: {
    index: './app/main.jsx',
    vendor: ['react', 'react-dom', 'react-router', 'classnames']
  },
  output: {
    path: path.resolve(__dirname, './dist'),
    filename: "[name].[chunkHash:8].js",
    publicPath: '',
    chunkFilename: "[name].[chunkHash:8].js",
  },
  plugins: [
    new webpack.optimize.CommonsChunkPlugin({
      names: ['vendor'],
    }),
  ]

上面这个配置应该大家都不陌生吧?打包第三方 vendor。

 其实这样写是有问题的。有什么问题呢?我们根据这个配置来操作一下。

 首先,运行起来,我们会得到 vendor.js 的添加 hash 值过后的输出; 

然后,修改index入口里面的任意文件,再次编译,得到 vendor.js 的添加 hash 值过后的输出;

最后,比较 vendor.js 两次编译的hash的值,你会惊讶的发现,为什么hash值改变了?我并没有修改vendor啊。

hash值改变了,那我们打包这个vendor也就没有意义了。

置于为什么会造成这个问题,我就不班门弄斧了,想要知道的人自己去研究一下webpack的底层。

在这里,我只是抛出一个解决方案:

entry: {
    index: './app/main.jsx',
    vendor: ['react', 'react-dom', 'react-router', 'classnames']
  },
  output: {
    path: path.resolve(__dirname, './dist'),
    filename: "[name].[chunkHash:8].js",
    publicPath: '',
    chunkFilename: "[name].[chunkHash:8].js",
  },
  plugins: [
    new webpack.optimize.CommonsChunkPlugin({
      names: ['vendor', 'manifest'],
    }),
  ]

没错,就是上面这个配置,只是简单的加了 'manifest' 。

再次做我们前面的测试,你会发现多了一个manifest.js,但是vendor的hash值不再变化了。

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

Javascript 相关文章推荐
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
May 25 Javascript
select 控制网页内容隐藏于显示的实现代码
May 25 Javascript
DOM节点删除函数removeChild()用法实例
Jan 12 Javascript
分析了一下JQuery中的extend方法实现原理
Feb 27 Javascript
JavaScript的==运算详解
Jul 20 Javascript
JS请求servlet功能示例
Jun 01 Javascript
javaScript中封装的各种写法示例(推荐)
Jul 03 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
Aug 18 Javascript
vue router的基本使用和配置教程
Nov 05 Javascript
微信小程序实现搜索历史功能
Mar 26 Javascript
小程序两种滚动公告栏的实现方法
Sep 17 Javascript
jQuery实现简单弹幕效果
Nov 28 jQuery
详解ES6 Promise对象then方法链式调用
Oct 20 #Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
Oct 20 #Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
Oct 20 #Javascript
angular4 获取wifi列表中文显示乱码问题的解决
Oct 20 #Javascript
vue 项目地址去掉 #的方法
Oct 20 #Javascript
VUE-cli3使用 svg-sprite-loader
Oct 20 #Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
Oct 20 #Javascript
You might like
《心理测量者3》剧场版动画预告
2020/03/02 日漫
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
Python入门篇之字符串
2014/10/17 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
pandas的相关系数与协方差实例
2019/12/27 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
python进度条显示之tqmd模块
2020/08/22 Python
python实现邮件循环自动发件功能
2020/09/11 Python
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
小学红领巾中秋节广播稿
2014/01/13 职场文书
文科教师毕业的自我评价
2014/01/16 职场文书
医务人员自我评价
2014/01/26 职场文书
运动会入场解说词
2014/02/07 职场文书
公司承诺书格式
2014/05/21 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
党支部创先争优活动总结
2014/08/28 职场文书
财政局个人年终总结
2015/03/03 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
我是特种兵观后感
2015/06/11 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
详解Java实现数据结构之并查集
2021/06/23 Java/Android
html form表单基础入门案例讲解
2021/07/15 HTML / CSS
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript