详解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遍历 table的脚本
Jul 23 Javascript
jQuery基本过滤选择器使用介绍
Apr 18 Javascript
jquery自定义滚动条插件示例分享
Feb 21 Javascript
js 动态为textbox添加下拉框数据源的方法
Apr 24 Javascript
js检测输入内容全为空格的方法
May 03 Javascript
js获取上传文件的绝对路径实现方法
Aug 02 Javascript
angularJs关于指令的一些冷门属性详解
Oct 24 Javascript
JS实现移动端整屏滑动的实例代码
Nov 10 Javascript
浅谈Vue内置component组件的应用场景
Mar 27 Javascript
微信小程序表单弹窗实例
Jul 19 Javascript
vue输入框使用模糊搜索功能的实现代码
May 26 Javascript
react中的DOM操作实现
Jun 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编程网上资源导航
2006/10/09 PHP
PHP中for循环语句的几种变型
2006/11/26 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
php无限级分类实现方法分析
2016/10/19 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
juqery 学习之四 筛选过滤
2010/11/30 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
为Python的web框架编写前端模版的教程
2015/04/30 Python
Python实用日期时间处理方法汇总
2015/05/09 Python
Python语言描述最大连续子序列和
2017/12/05 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
Python中@property的理解和使用示例
2019/06/11 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
迟到检讨书5000字
2014/01/31 职场文书
《九色鹿》教学反思
2014/02/27 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
有关朝花夕拾的读书笔记
2015/06/29 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
python+opencv实现视频抽帧示例代码
2021/06/11 Python
vue实现移动端div拖动效果
2022/03/03 Vue.js
python处理json数据文件
2022/04/11 Python