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 相关文章推荐
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 Javascript
对xmlHttp对象方法和属性的理解
Jan 17 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
Jul 15 Javascript
快速解决FusionCharts联动的中文乱码问题
Dec 04 Javascript
理解JS绑定事件
Jan 19 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
May 11 Javascript
Javascript类型系统之String字符串类型详解
Jun 21 Javascript
必备的JS调试技巧汇总
Jul 20 Javascript
使用express搭建一个简单的查询服务器的方法
Feb 09 Javascript
利用原生的JavaScript实现简单拼图游戏
Nov 18 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
Apr 19 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
Dec 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
PHP $_SERVER详解
2009/01/16 PHP
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
PHP使用数组依次替换字符串中匹配项
2016/01/08 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
PHP实现的日历功能示例
2018/09/01 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
页面中iframe相互传值传参
2009/12/13 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
Vue组件和Route的生命周期实例详解
2018/02/10 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
python 把列表转化为字符串的方法
2018/10/23 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
Python 私有化操作实例分析
2019/11/21 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
python 追踪except信息方式
2020/04/25 Python
尼克松手表官网:Nixon手表
2019/03/17 全球购物
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
应届生幼儿园求职信
2013/11/12 职场文书
优秀毕业生自我鉴定
2014/01/19 职场文书
趣味游戏活动方案
2014/02/07 职场文书
职代会闭幕词
2015/01/28 职场文书
三八妇女节致辞
2015/07/31 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python