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-表格排序(降序/反序)实现介绍(附图)
May 30 Javascript
简单实现jquery焦点图
Dec 12 Javascript
详解jQuery选择器
Dec 21 Javascript
完美实现js拖拽效果 return false用法详解
Jul 28 Javascript
JavaScript中递归实现的方法及其区别
Sep 12 Javascript
详解React开发必不可少的eslint配置
Feb 05 Javascript
微信小程序使用Promise简化回调
Feb 06 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
Apr 11 Javascript
vue自定义filters过滤器
Apr 26 Javascript
服务端预渲染之Nuxt(使用篇)
Apr 08 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
Aug 20 Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
PHP中集成PayPal标准支付的实现方法分享
2012/02/06 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
js原生态函数中使用jQuery中的 $(this)无效的解决方法
2011/05/25 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
python服务器端收发请求的实现代码
2014/09/29 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
详解python pandas 分组统计的方法
2019/07/30 Python
Django自带日志 settings.py文件配置方法
2019/08/30 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
Python如何读取、写入CSV数据
2020/07/28 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
时尚休闲吧创业计划书
2014/01/25 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
服装仓管员岗位职责
2014/06/17 职场文书
英语系本科生求职信
2014/07/15 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
群众路线对照检查材料
2014/09/22 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
春风化雨观后感
2015/06/11 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
win10识别不了U盘怎么办 win10系统读取U盘失败的解决办法
2022/08/05 数码科技