详解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 相关文章推荐
JScript中的undefined和&quot;undefined&quot;的区别
Mar 08 Javascript
无闪烁更新网页内容JS实现
Dec 19 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
Oct 23 Javascript
深入探寻seajs的模块化与加载方式
Apr 14 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
Dec 13 Javascript
three.js实现围绕某物体旋转
Jan 25 Javascript
深入理解Webpack 中路径的配置
Jun 17 Javascript
原生javascript实现的全屏滚动功能示例
Sep 19 Javascript
vscode 开发Vue项目的方法步骤
Nov 25 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 Javascript
express框架中使用jwt实现验证的方法
Aug 25 Javascript
js基于canvas实现时钟组件
Feb 07 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
我常用的几个类
2006/10/09 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
php实现倒计时效果
2015/12/19 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
python requests post多层字典的方法
2018/12/27 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
python动态视频下载器的实现方法
2019/09/16 Python
python如何代码集体右移
2020/07/20 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
python3访问字典里的值实例方法
2020/11/18 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
难忘的一天教学反思
2014/04/30 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL