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 相关文章推荐
超级退弹代码
Jul 07 Javascript
setInterval,setTimeout与jquery混用的问题
Apr 08 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
Apr 12 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
Apr 30 Javascript
js利用正则表达式检验输入内容是否为网址
Jul 05 Javascript
jQuery事件绑定用法详解
Sep 08 Javascript
JavaScript实现Java中Map容器的方法
Oct 09 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
Mar 24 Javascript
jQuery实现的简单图片轮播效果完整示例
Feb 08 jQuery
Vue CLI3中使用compass normalize的方法
May 30 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
Sep 20 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
Sep 25 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 读取shell管道传输过来的内容
2010/03/01 PHP
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
Yii学习总结之安装配置
2015/02/22 PHP
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
JS控制静态页面传递参数并获取参数应用
2016/08/10 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
Vue使用Ref跨层级获取组件的步骤
2021/01/25 Vue.js
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
python实现批量修改图片格式和尺寸
2018/06/07 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
本科生详细的自我评价
2013/09/19 职场文书
我的中国心演讲稿
2014/09/04 职场文书
初三语文教学计划
2015/01/22 职场文书
员工工作表扬信
2015/05/05 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书