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的闭包
Jan 17 Javascript
JavaScript中OnLoad几种使用方法
Dec 15 Javascript
js为空或不是对象问题的快速解决方法
Dec 11 Javascript
点击标签切换和自动切换DIV选项卡
Aug 10 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
JavaScript实现单例模式实例分享
Dec 22 Javascript
深入浅析javascript函数中with
Oct 28 Javascript
apicloud拉起小程序并传递参数的方法示例
Nov 21 Javascript
Vue 引入AMap高德地图的实现代码
Apr 29 Javascript
Vue中使用matomo进行访问流量统计的实现
Nov 05 Javascript
react 不用插件实现数字滚动的效果示例
Apr 14 Javascript
详解使用mocha对webpack打包的项目进行&quot;冒烟测试&quot;的大致流程
Apr 27 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的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
php错误级别的设置方法
2013/06/17 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
php建立Ftp连接的方法
2015/03/07 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
2018/05/30 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
Python实例之wxpython中Frame使用方法
2014/06/09 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
为什么要做架构设计
2015/07/08 面试题
Java面向对象面试题
2016/12/26 面试题
八一建军节活动方案
2014/02/10 职场文书
英语故事演讲稿
2014/04/29 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js