详解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基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
Aug 05 Javascript
JS+CSS实现的蓝色table选项卡效果
Oct 08 Javascript
简单理解vue中el、template、replace元素
Oct 27 Javascript
js实现模糊匹配功能
Feb 15 Javascript
vue如何从接口请求数据
Jun 22 Javascript
JavaScript生成简单等差数列
Nov 28 Javascript
react学习笔记之state以及setState的使用
Dec 07 Javascript
详解nuxt sass全局变量(公共scss解决方案)
Jun 27 Javascript
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
vue自定义指令之面板拖拽的实现
Apr 14 Javascript
JS实现贪吃蛇游戏
Nov 15 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 Vue.js
详解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脚本数据库功能详解(中)
2006/10/09 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
python中对list去重的多种方法
2014/09/18 Python
python实现矩阵乘法的方法
2015/06/28 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
一道python走迷宫算法题
2018/01/22 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
为什么需要版本控制?
2013/08/08 面试题
园长自我鉴定
2013/10/06 职场文书
外贸主管求职简历的自我评价
2013/10/23 职场文书
岗位职责定义及内容
2013/11/08 职场文书
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
中等生评语大全
2014/05/04 职场文书
专家推荐信模板
2014/05/09 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL