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 相关文章推荐
js读写(删除)Cookie实例详解
Apr 17 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
Apr 23 Javascript
学习javascript面向对象 javascript实现继承的方式
Jan 04 Javascript
关于JavaScript限制字数的输入框的那些事
Aug 14 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
Dec 21 Javascript
浅谈jquery拼接字符串效率比较高的方法
Feb 22 Javascript
svg动画之动态描边效果
Feb 22 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
May 03 Javascript
详解element-ui日期时间选择器的日期格式化问题
Apr 08 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
Mar 07 Javascript
JavaScript代码简化技巧实例解析
Sep 09 Javascript
使用js原生实现年份轮播选择效果实例
Jan 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
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
优化RequireJS项目的相关技巧总结
2015/07/01 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
python中的字符串内部换行方法
2018/07/19 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
心理健康日活动总结
2014/05/08 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
python Polars库的使用简介
2021/04/21 Python
教你怎么用Python操作MySql数据库
2021/05/31 Python
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS
Oracle中日期的使用方法实例
2022/07/07 Oracle