详解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获取对象为null的解决方法
Nov 21 Javascript
JavaScript中的console.trace()函数介绍
Dec 29 Javascript
angular.element方法汇总
Jan 07 Javascript
轻松实现js选项卡切换效果
Sep 24 Javascript
javascript获取以及设置光标位置
Feb 16 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
May 17 Javascript
JS给按钮添加跳转功能类似a标签
May 30 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
Jun 19 Javascript
angularjs实现的购物金额计算工具示例
May 08 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
Apr 17 Javascript
详谈vue中router-link和传统a链接的区别
Jul 22 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
ThinkPHP验证码使用简明教程
2014/03/05 PHP
php创建图像具体步骤
2017/03/13 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
2018/05/30 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
微信小程序实现的五星评价功能示例
2019/04/25 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
Python处理字符串之isspace()方法的使用
2015/05/19 Python
Python语言描述随机梯度下降法
2018/01/04 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
django使用JWT保存用户登录信息
2020/04/22 Python
python中setuptools的作用是什么
2020/06/19 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
python生成word合同的实例方法
2021/01/12 Python
Ruby如何进行文件操作
2014/07/17 面试题
乐观大学生的自我评价
2014/01/10 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
普通党员整改措施
2014/10/24 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
pytorch中的 .view()函数的用法介绍
2022/03/17 Python
Python装饰器详细介绍
2022/03/25 Python
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL