详解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 相关文章推荐
js里怎么取select标签里的值并修改
Dec 10 Javascript
js正文内容高亮效果的实现方法
Jun 30 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
May 28 Javascript
jQuery级联操作绑定事件实例
Sep 02 Javascript
javascript学习笔记(五)原型和原型链详解
Oct 08 Javascript
用jquery模仿的a的title属性的例子
Oct 22 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
Aug 25 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
Apr 19 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
Jul 12 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
纯js代码生成可搜索选择下拉列表的实例
Jan 11 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
Nov 01 Javascript
详解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
php中文字符截取防乱码
2008/03/28 PHP
mysql+php分页类(已测)
2008/03/31 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
一篇文章掌握RequireJS常用知识
2016/01/26 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
python多线程扫描端口示例
2014/01/16 Python
python学习之编写查询ip程序
2016/02/27 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
python命令行参数用法实例分析
2019/06/25 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
平面设计自荐信
2013/10/07 职场文书
经典优秀个人求职信分享
2013/12/12 职场文书
我的理想演讲稿
2014/04/30 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers
Golang bufio详细讲解
2022/04/21 Golang