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实现背景图片切换效果代码
Nov 14 Javascript
JavaScript之编码规范 推荐
May 23 Javascript
文件编码导致jquery失效的解决方法
Jun 26 Javascript
jquery实现显示已选用户
Jul 21 Javascript
Bootstrap每天必学之导航条(二)
Mar 01 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
Mar 30 Javascript
正则 js分转元带千分符号详解
Mar 08 Javascript
Angular模板表单校验方法详解
Aug 11 Javascript
angular写一个列表的选择全选交互组件的示例
Jan 22 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
May 02 Javascript
vue3.0 的 Composition API 的使用示例
Oct 26 Javascript
Javascript实现打鼓效果
Jan 29 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网页木马一枚 附PHP木马的防范方法
2009/10/09 PHP
php 文件上传系统手记
2009/10/26 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
jquery中对表单的基本操作代码
2010/07/29 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
初学Python实用技巧两则
2014/08/29 Python
Python下的twisted框架入门指引
2015/04/15 Python
Python的randrange()方法使用教程
2015/05/15 Python
pycharm安装和首次使用教程
2018/08/27 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
python绘制雪景图
2019/12/16 Python
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
新郎父亲婚宴答谢词
2014/01/11 职场文书
幼儿园老师寄语
2014/04/03 职场文书
《四季》教学反思
2014/04/08 职场文书
运动会演讲稿200字
2014/08/25 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
公司2014年度工作总结
2014/12/10 职场文书
师德先进个人材料
2014/12/20 职场文书
婚育证明样本
2015/06/16 职场文书
感恩的心主题班会
2015/08/12 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书