详解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 相关文章推荐
javascript 一个自定义长度的文本自动换行的函数
Aug 19 Javascript
JavaScript CSS菜单功能 改进版
Dec 20 Javascript
InnerHtml和InnerText的区别分析
Mar 13 Javascript
分享一款基于jQuery的视频播放插件
Oct 09 Javascript
js常用系统函数用法实例分析
Jan 12 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
Mar 24 Javascript
下一代Bootstrap的5个特点 超酷炫!
Jun 17 Javascript
解决option标签selected="selected"属性失效的问题
Nov 06 Javascript
详解Javascript 中的 class、构造函数、工厂函数
Dec 20 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
Sep 27 Javascript
vue里的data要用return返回的原因浅析
May 28 Javascript
Vue实现购物车实例代码两则
May 30 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+xslt在windows平台上
2006/10/09 PHP
php fckeditor 调用的函数
2009/06/21 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
深入php var_dump()函数的详解
2013/06/05 PHP
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
基于jquery实现多级菜单效果
2017/07/25 jQuery
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
Python采用Django制作简易的知乎日报API
2016/08/03 Python
python连接数据库的方法
2017/10/19 Python
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
Python实现的knn算法示例
2018/06/14 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
PHP数据运算类型都有哪些
2013/11/05 面试题
公司投资建议书
2014/05/16 职场文书
员工合理化建议书
2014/05/19 职场文书
奥林匹克的口号
2014/06/13 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
大国崛起观后感
2015/06/02 职场文书
小学生安全教育心得体会
2016/01/15 职场文书