详解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 相关文章推荐
通过JAVASCRIPT读取ASP设定的COOKIE
Nov 24 Javascript
JavaScript类和继承 constructor属性
Mar 04 Javascript
ECMAScript 创建自己的js类库
Nov 22 Javascript
js模拟淘宝网的多级选择菜单实现方法
Aug 18 Javascript
vue.js初学入门教程(2)
Nov 07 Javascript
五步轻松实现JavaScript HTML时钟效果
Mar 25 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
Jan 07 Javascript
vuex如何重置所有state(可定制)
Jan 17 Javascript
详解vue中的父子传值双向绑定及数据更新问题
Jun 13 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
Feb 01 jQuery
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
Jun 29 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
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
Javascript this指针
2009/07/30 Javascript
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
js对象的复制继承实例
2015/01/10 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
2015/06/04 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
详解angular element()方法使用
2017/04/08 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
python计算日期之间的放假日期
2018/06/05 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
Linux文件操作命令都有哪些
2015/02/27 面试题
Java软件工程师综合面试题笔试题
2013/09/08 面试题
jQuery treeview树形结构应用
2021/03/24 jQuery
行政人员工作职责
2013/12/05 职场文书
药品采购员岗位职责
2014/02/08 职场文书
JS中如何优雅的使用async await详解
2021/10/05 Javascript
MySQL 服务和数据库管理
2021/11/11 MySQL
Python语言内置数据类型
2022/02/24 Python