详解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 相关文章推荐
jQuery UI Autocomplete 体验分享
Feb 14 Javascript
使用typeof判断function是否存在于上下文
Aug 14 Javascript
jQuery仿天猫实现超炫的加入购物车
May 04 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
AngularJS使用ngMessages进行表单验证
Dec 27 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
Jan 13 Javascript
JQuery用户名校验的具体实现
Mar 18 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
Jul 21 Javascript
JQuery控制DIV的选取实现方法
Sep 18 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
May 21 Javascript
vue 实现小程序或商品秒杀倒计时
Apr 14 Javascript
vue在路由中验证token是否存在的简单实现
Nov 11 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 文章调用类代码
2011/08/11 PHP
解析php入库和出库
2013/06/25 PHP
php中spl_autoload详解
2014/10/17 PHP
php+mysql数据库查询实例
2015/01/21 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
document.getElementById介绍
2011/09/13 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
js的对象与函数详解
2019/01/21 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
linux 下selenium chrome使用详解
2020/04/02 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
医学生自荐信范文
2013/12/03 职场文书
成品仓管员岗位职责
2013/12/11 职场文书
中学教师自我鉴定
2014/02/07 职场文书
收款委托书范本
2014/09/11 职场文书
上下班时间调整通知
2015/04/23 职场文书
初中政治教师教学反思
2016/02/23 职场文书
python ConfigParser库的使用及遇到的坑
2022/02/12 Python
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers