vue-cli3 DllPlugin 提取公用库的方法


Posted in Javascript onApril 24, 2019

vue 开发过程中,保存一次就会编译一次,如果能够减少编译的时间,哪怕是一丁点,也能节省不少时间。开发过程中个人编写的源文件才会频繁变动,而一些库文件我们一般是不会去改动的。如果能把这些库文件提取出来,就能减少打包体积,加快编译速度。本文主要讲述在 vue-cli3 中利用 DllPlugin 来进行预编译。

1、安装相关插件

yarn add webpack-cli@^3.2.3 add-asset-html-webpack-plugin@^3.1.3 clean-webpack-plugin@^1.0.1 --dev

2、编写配置文件

在项目根目录下新建 webpack.dll.conf.js,输入以下内容。

const path = require('path')
const webpack = require('webpack')
const CleanWebpackPlugin = require('clean-webpack-plugin')

// dll文件存放的目录
const dllPath = 'public/vendor'

module.exports = {
 entry: {
  // 需要提取的库文件
  vendor: ['vue', 'vue-router', 'vuex', 'axios', 'element-ui']
 },
 output: {
  path: path.join(__dirname, dllPath),
  filename: '[name].dll.js',
  // vendor.dll.js中暴露出的全局变量名
  // 保持与 webpack.DllPlugin 中名称一致
  library: '[name]_[hash]'
 },
 plugins: [
  // 清除之前的dll文件
  new CleanWebpackPlugin(['*.*'], {
   root: path.join(__dirname, dllPath)
  }),
  // 设置环境变量
  new webpack.DefinePlugin({
   'process.env': {
    NODE_ENV: 'production'
   }
  }),
  // manifest.json 描述动态链接库包含了哪些内容
  new webpack.DllPlugin({
   path: path.join(__dirname, dllPath, '[name]-manifest.json'),
   // 保持与 output.library 中名称一致
   name: '[name]_[hash]',
   context: process.cwd()
  })
 ]
}

3、生成 dll

在 package.json 中加入如下命令

"scripts": {
  ...
  "dll": "webpack -p --progress --config ./webpack.dll.conf.js"
},

控制台运行

yarn run dll

4、忽略已编译文件

为了节约编译的时间,这时间我们需要告诉 webpack 公共库文件已经编译好了,减少 webpack 对公共库的编译时间。在项目根目录下找到 vue.config.js ( 没有则新建 ),配置如下:

const webpack = require('webpack')
module.exports = {
  ...
  configureWebpack: {
    plugins: [
     new webpack.DllReferencePlugin({
      context: process.cwd(),
      manifest: require('./public/vendor/vendor-manifest.json')
     })
    ]
  }
}

5、index.html 中加载生成的 dll 文件

经过上面的配置,公共库提取出来了,编译速度快了,但如果不引用生成的 dll 文件,网页是不能正常工作的。

打开 public/index.html,插入 script 标签。

...
<script src="./vendor/vendor.dll.js"></script>

到此公用库提取完成,但总觉得最后一部手工插入 script 不太优雅,下面介绍下如何自动引入生成的 dll 文件。

打开 vue.config.js 在 configureWebpack plugins 节点下,配置 add-asset-html-webpack-plugin

const path = require('path')
const webpack = require('webpack')
const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin')
module.exports = {
  ...
  configureWebpack: {
    plugins: [
     new webpack.DllReferencePlugin({
      context: process.cwd(),
      manifest: require('./public/vendor/vendor-manifest.json')
     }),
     // 将 dll 注入到 生成的 html 模板中
     new AddAssetHtmlPlugin({
      // dll文件位置
      filepath: path.resolve(__dirname, './public/vendor/*.js'),
      // dll 引用路径
      publicPath: './vendor',
      // dll最终输出的目录
      outputPath: './vendor'
     })
    ]
  }
}

总结

以上所述是小编给大家介绍的vue-cli3 DllPlugin 提取公用库的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
在JavaScript中遭遇级联表达式陷阱
Mar 08 Javascript
关于jquery append() html时的小问题的解决方法
Dec 16 Javascript
MooTools 页面滚动浮动层智能定位实现代码
Aug 23 Javascript
浏览器打开层自动缓慢展开收缩实例代码
Jul 04 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
Nov 26 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
Dec 22 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
Oct 27 Javascript
给easyui的datebox控件添加清空按钮的实现方法
Nov 09 Javascript
详解webpack+vue-cli项目打包技巧
Jun 17 Javascript
细说webpack源码之compile流程-入口函数run
Dec 26 Javascript
js实现动态改变radio状态的方法
Feb 28 Javascript
django js 实现表格动态标序号的实例代码
Jul 12 Javascript
VUE 实现复制内容到剪贴板的两种方法
Apr 24 #Javascript
详解一个小实例理解js原型和继承
Apr 24 #Javascript
微信小程序实现的一键复制功能示例
Apr 24 #Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
Apr 24 #Javascript
解决vue 单文件组件中样式加载问题
Apr 24 #Javascript
vue router 用户登陆功能的实例代码
Apr 24 #Javascript
10个最受欢迎的 JavaScript框架(推荐)
Apr 24 #Javascript
You might like
php桌面中心(一) 创建数据库
2007/03/11 PHP
php的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
学习jQuey中的return false
2015/12/18 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
python备份文件的脚本
2008/08/11 Python
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
python 写的一个爬虫程序源码
2016/02/28 Python
Python解析json文件相关知识学习
2016/03/01 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
Python函数和模块的使用总结
2019/05/20 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
python多线程使用方法实例详解
2019/12/30 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
优秀中专生推荐信
2013/11/17 职场文书
加工操作管理制度
2014/01/19 职场文书
《灯光》教学反思
2014/02/08 职场文书
团日活动总结报告
2014/06/25 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
股权转让协议书
2014/12/07 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
婚庆司仪开场白
2015/05/29 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python
室外天线与收音机天线杆接合方法
2022/04/05 无线电