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 相关文章推荐
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
Dec 30 Javascript
基于Jquery的跨域传输数据(JSONP)
Mar 10 Javascript
IE 当eval遇上function的处理
Aug 09 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
Feb 07 Javascript
基于JQuery的一句话搞定手风琴菜单
Sep 14 Javascript
jQuery侧边栏随窗口滚动实现方法
Mar 04 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
Jan 26 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
Jan 12 Javascript
vue中使用better-scroll实现滑动效果及注意事项
Nov 15 Javascript
js计时事件实现圆形时钟
Mar 25 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
Feb 10 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
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
建立动态的WML站点(三)
2006/10/09 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
2017/05/22 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
Puppet的一些技巧
2018/09/17 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
JS用最简单的方法实现四舍五入
2019/08/27 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
python 实现插入排序算法
2012/06/05 Python
Python学习之asyncore模块用法实例教程
2014/09/29 Python
使用grappelli为django admin后台添加模板
2014/11/18 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
Python正则表达式学习小例子
2020/03/03 Python
python实现处理mysql结果输出方式
2020/04/09 Python
Django nginx配置实现过程详解
2020/09/10 Python
幼儿园大班毕业感言
2014/02/06 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
公司周年庆活动方案
2014/08/25 职场文书
销售助理岗位职责
2015/02/11 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
Python进行区间取值案例讲解
2021/08/02 Python