详解webpack提取第三方库的正确姿势


Posted in Javascript onDecember 22, 2017

我们在用webpack打包是时候,常常想单独提取第三方库,把它作为稳定版本的文件,利用浏览缓存减少请求次数。常用的提取第三方库的方法有两种

  1. CommonsChunkPlugin
  2. DLLPlugin

区别:第一种每次打包,都要把第三方库也运行打包一次,第二种方法每次打包只打包项目文件,我们只要引用第一次打包好的第三方压缩文件就行了

CommonsChunkPlugin方法简介

我们拿vue举例

const vue = require('vue')
{
 entry: {
 // bundle是我们要打包的项目文件的导出名字, app是入口js文件
 bundle: 'app',
 // vendor就是我们要打包的第三方库最终生成的文件名,数组里是要打包哪些第三方库, 如果不是在node——modules里面,可以填写库的具体地址
 vendor: ['vue']
 },
 output: {
  path: __dirname + '/bulid/',
 // 文件名称
 filename: '[name].js'
 },
 plugins: {
 // 这里实例化webpack.optimize.CommonsChunkPlugin构造函数
 // 打包之后就生成vendor.js文件
 new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.js')
 }
}

然后打包生成的文件引入到html文件里面

<script src="/build/vendor.js"></script>
 <script src="/build/bundle.js"></script>

DLLPlugin方法简介

首先准备两个文件

  1. webpack.config.js
  2. webpack.dll.config.js

webpack.dll.config.js文件配置如下

const webpack = require('webpack')
const library = '[name]_lib'
const path = require('path')

module.exports = {
 entry: {
 vendors: ['vue', 'vuex']
 },

 output: {
 filename: '[name].dll.js',
 path: 'dist/',
 library
 },

 plugins: [
 new webpack.DllPlugin({
  path: path.join(__dirname, 'dist/[name]-manifest.json'),
  // This must match the output.library option above
  name: library
 }),
 ],
}

然后webpack.config.js 文件配置如下

const webpack = require('webpack')

module.exports = {
 entry: {
 app: './src/index'
 },
 output: {
 filename: 'app.bundle.js',
 path: 'dist/',
 },
 plugins: [
 new webpack.DllReferencePlugin({
  context: __dirname,
  manifest: require('./dist/vendors-manifest.json')
 })
 ]
}

然后运行

$ webpack --config webpack.dll.config.js
$ webpack --config webpack.config.js

html引用方式

<script src="/dist/vendors.dll.js"></script>
<script src="/dist/app.bundle.js"></script>

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

Javascript 相关文章推荐
打开超链需要“确认”对话框的方法
Mar 08 Javascript
javascript String 对象
Apr 25 Javascript
js利用div背景,做一个竖线的效果。
Nov 22 Javascript
一个很酷的拖动层的js类,兼容IE及Firefox
Jun 23 Javascript
js中的this关键字详解
Sep 25 Javascript
全屏js头像上传插件源码高清版
Mar 29 Javascript
基于JavaScript实现在新的tab页打开url
Aug 04 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
Sep 17 Javascript
基于jQuery实现顶部导航栏功能
Dec 27 Javascript
Vue 莹石摄像头直播视频实例代码
Aug 31 Javascript
vue模仿网易云音乐的单页面应用
Apr 24 Javascript
react 不用插件实现数字滚动的效果示例
Apr 14 Javascript
利用JS判断客户端类型你应该知道的四种方法
Dec 22 #Javascript
JavaScript伪数组用法实例分析
Dec 22 #Javascript
JavaScript中Object值合并方法详解
Dec 22 #Javascript
Angular简单验证功能示例
Dec 22 #Javascript
Angular实现的table表格排序功能完整示例
Dec 22 #Javascript
详解Vue中localstorage和sessionstorage的使用
Dec 22 #Javascript
vue + element-ui实现简洁的导入导出功能
Dec 22 #Javascript
You might like
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
浅谈js闭包理解
2019/03/28 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
分析python服务器拒绝服务攻击代码
2014/01/16 Python
wxPython窗口中文乱码解决方法
2014/10/11 Python
解决Python安装后pip不能用的问题
2018/06/12 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
岗位竞聘演讲稿范文
2014/04/24 职场文书
2015年班干部工作总结
2015/04/29 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
从事会计工作年限证明
2015/06/23 职场文书
情人节单身感言
2015/08/03 职场文书
股东协议书范本2016
2016/03/21 职场文书
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python