详解webpack打包第三方类库的正确姿势

 更新时间:2018年10月20日 14:55:45   作者:myqianlan  
这篇文章主要介绍了详解webpack打包第三方类库的正确姿,我们主要介绍了webpack.optimize.CommonsChunkPlu,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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值不再变化了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • js实现局部页面打印预览原理及示例代码

    js实现局部页面打印预览原理及示例代码

    js 如何打印预览,实局部打印页面很简单。就是把你需要打印的部分做一个起始标记,下面有个示例大大家不妨参考下
    2014-07-07
  • SVG快速构建马赛克效果

    SVG快速构建马赛克效果

    这篇文章主要为大家介绍了SVG快速构建马赛克效果示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • javascript 异步页面查询实现代码(asp.net)

    javascript 异步页面查询实现代码(asp.net)

    异步页面查询,其实与自动完成时一样的原理,根据用户输入的关键词自动的与数据库中的匹配,并显示出来,提高用户体验,但主要搜索量大的话,增加服务器开销。
    2010-05-05
  • JavaScript forEach中return失效问题解决方案

    JavaScript forEach中return失效问题解决方案

    这篇文章主要介绍了JavaScript forEach中return失效问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Select2.js下拉框使用小结

    Select2.js下拉框使用小结

    这篇文章主要为大家详细总结了Select2.js下拉框的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • javascript实现支付宝滑块验证码效果

    javascript实现支付宝滑块验证码效果

    这篇文章主要为大家详细介绍了javascript实现支付宝滑块验证码效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • Javascript简单实现面向对象编程继承实例代码

    Javascript简单实现面向对象编程继承实例代码

    这篇文章主要介绍了Javascript简单实现面向对象编程继承实例代码,简单分析了面向对象程序设计的特征与继承的具体实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • javascript生成随机颜色示例代码

    javascript生成随机颜色示例代码

    这篇文章主要介绍了使用javascript如何生成随机颜色,需要的朋友可以参考下
    2014-05-05
  • 调试Node.JS的辅助工具(NodeWatcher)

    调试Node.JS的辅助工具(NodeWatcher)

    Node.JS调试貌似比较麻烦,每次改完了要重启一下Node进程.GOOGLE上有个NPM模块,可以监控JS文件的更改,然后自动重启Node.但我下载后在windows里运行报错
    2012-01-01
  • vant倒序年月日期组件封装实例详解

    vant倒序年月日期组件封装实例详解

    这篇文章主要介绍了vant倒序年月日期组件封装实例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03

最新评论