webpack打包进度展示以及美化教程

 更新时间:2022年1月24日 16:51  点击:1166 作者:jsmask

介绍

我们在自己搭建项目的时候,在打包构建的时候等待非常的枯燥,尤其是特别大不知道还要等多久才是最恐怖的,这时不妨找一款进度条插件,让我们不再焦躁下去,本期我们会推荐三款进度条插件给大家进行选择,找出或者改造喜欢的那一款来用到自己的项目中。

准备

我们既然要美化进度条就要考虑给他更改颜色。目前市面上给终端字符串上色最好用的还是chalk,支持的颜色非常多,而且非常干净简洁,我们这里用的是4.1.2版本。

# NPM
npm i -D chalk
# YARN
yarn add -D chalk

我们安装后,在 webpack.config.js 中引用一下,如下:

// webpack.config.js
const HtmlWebpackPlugin = require("html-webpack-plugin");
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const chalk = require("chalk");
const plugins = [
  new CleanWebpackPlugin(),
  new HtmlWebpackPlugin({
    filename: "index.html",
    template: path.resolve(__dirname, "public/index.html")
  })
]
module.exports = {
  // ...
  plugins
}

这就是目前的基础结构,后面我们就会把介绍的插件推给plugins里面,那么,我们就要切入正题了。

1.webpack.ProgressPlugin

webpack.ProgressPlugin 作为webpack的内置插件具备了可以在打包构建中输出当前的进度和简述,虽然可能扩展和美观都有限,但是可以不用下载其他第三方插件了。

const { ProgressPlugin } = require("webpack")
let progressPlugin = new ProgressPlugin({
  activeModules: true,         // 默认false,显示活动模块计数和一个活动模块正在进行消息。
  entries: true,  			   // 默认true,显示正在进行的条目计数消息。
  modules: false,              // 默认true,显示正在进行的模块计数消息。
  modulesCount: 5000,          // 默认5000,开始时的最小模块数。PS:modules启用属性时生效。
  profile: false,         	   // 默认false,告诉ProgressPlugin为进度步骤收集配置文件数据。
  dependencies: false,         // 默认true,显示正在进行的依赖项计数消息。
  dependenciesCount: 10000,    // 默认10000,开始时的最小依赖项计数。PS:dependencies启用属性时生效。
})
plugins.push(progressPlugin)

主要的参数都写明在注释中就不一一赘述了。

最后,我们的输出表现为:

注意,webpack.ProgressPlugin 还有一个参数没有去写上,他就是handler,它是可以返回构建信息的钩子函数,下面我们就来简单写一下。

new ProgressPlugin({
    // ...
    handler(percentage, message, ...args) {   // 钩子函数
            console.log(chalk.yellow("进度:") + chalk.green.bold(~~(percentage * 100) + "%") + " " + chalk.yellow.bold("操作:") + chalk.blue.bold(message))
    }
})

返回出的信息如下:

  • percentag:一个介于 0 和 1 之间的数字,表示编译的完成百分比。

  • message:当前执行的钩子的简短描述。

  • ...args:零个或多个描述当前进度的附加字符串。

以上钩子函数的代码输出结果为:

2.progress-bar-webpack-plugin

progress-bar-webpack-plugin 这款插件,如果有熟悉node-progress的同学会感到并不陌生,因为他选项几乎跟node-progress一模一样,而且改造扩展起来也非常容易,总的来说就是,灵活易用十分小巧方便。

我们要先安装一下吧:

# NPM
npm i -D progress-bar-webpack-plugin
# YARN
yarn add -D progress-bar-webpack-plugin

const ProgressBarPlugin = require('progress-bar-webpack-plugin');
let progressPlugin = new ProgressBarPlugin({
  width: 50, 					 // 默认20,进度格子数量即每个代表进度数,如果是20,那么一格就是5。
  format: chalk.blue.bold("build") + chalk.yellow('[:bar] ') + chalk.green.bold(':percent') + ' (:elapsed秒)',
  stream: process.stderr,        // 默认stderr,输出流
  complete: "#",                 // 默认“=”,完成字符
  clear: false,                  // 默认true,完成时清除栏的选项
  renderThrottle: "",            // 默认16,更新之间的最短时间(以毫秒为单位)
  callback() {                   // 进度条完成时调用的可选函数
    console.log(chalk.red.bold("完成"))
  }
})
plugins.push(progressPlugin)

这里着重要说的是format就是进度条的格式:

  • :bar 进度条本身

  • :current 当前刻度数

  • :total 总刻度

  • :elapsed 以秒为单位的时间

  • :percent 完成百分比

  • :msg 当前进度消息

这里我们只要写出对应的字符串就可以将需要展示的信息进行构建显示。

最后,我们的输出表现为:

3.webpackbar

webpackbar 这是一款个人感觉是个十分美观优雅的进度条,很多成名框架都用过他。而且使用起来也极其方便,也可以支持多个并发构建是个十分强大的进度插件。

我们依然要先安装一下:

# NPM
npm i -D webpackbar
# YARN
yarn add -D webpackbar

const WebpackBar = require('webpackbar');
let progressPlugin = new WebpackBar({
  color: "#85d",  // 默认green,进度条颜色支持HEX
  basic: false,   // 默认true,启用一个简单的日志报告器
  profile:false,  // 默认false,启用探查器。
})
plugins.push(progressPlugin)

最常用的属性配置其实就是这些,注释里也写的很清楚了。

当然里面还有一个属性就是reporters还没有写上,可以在里面注册事件,也可以理解为各种钩子函数。如下:

{   // 注册一个自定义记者数组
    start(context) {
      // 在(重新)编译开始时调用
      const { start, progress, message, details, request, hasErrors } = context
    },
    change(context) {
      // 在 watch 模式下文件更改时调用
    },
    update(context) {
      // 在每次进度更新后调用
    },
    done(context) {
      // 编译完成时调用
    },
    progress(context) {
      // 构建进度更新时调用
    },
    allDone(context) {
      // 当编译完成时调用
    },
    beforeAllDone(context) {
      // 当编译完成前调用
    },
    afterAllDone(context) {
      // 当编译完成后调用
    },
}

当然多数情况下,我们并不会使用这些,基本默认就足够了。

最后,刚才的代码我们的输出表现为:

结语

最后个人对他们在使用中做个客观评价吧:

进度插件美观扩展性额外安装大小
webpack.ProgressPlugin差劲容易/一般无需16.9 KB
progress-bar-webpack-plugin良好容易/优秀需要5.72 kB
webpackbar优秀复杂/优秀需要134 KB

怎么样,反正我更青睐于webpackbar ,毕竟现在是个看脸的时代了。当然,具体好坏也是需要你自己去体会的,他们各自的官网上都有相应存在的问题和一些不同的扩展方法等你去发掘,还等什么?冲鸭~

到此这篇关于webpack打包进度展示以及美化的文章就介绍到这了,更多相关webpack打包进度展示内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

原文出处:https://juejin.cn/post/7055321034454466596

[!--infotagslink--]

相关文章

  • 详解如何将c语言文件打包成exe可执行程序

    这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25
  • Pyinstaller打包文件太大的解决方案

    这篇文章主要介绍了Pyinstaller打包文件太大的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • python打包生成so文件的实现

    这篇文章主要介绍了python打包生成so文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-30
  • 带你了解Java Maven的打包操作

    这篇文章主要介绍了Maven打包的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-13
  • Webpack打包css后z-index被重新计算的解决方法

    这篇文章主要跟大家分享了Webpack打包css后z-index被重新计算的解决方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。...2017-06-24
  • Webpack 实现 Node.js 代码热替换

    这两天为了这个问题, Gitter 上问, Twitter 上问, GitHub 上问, 两天没反应 原来写博客的 jlongster 不理我, 我也不知道 Webpack 作者的联系方式 最后在 Gitter 上发的消息他似乎看到了, 就粗略地解释了一遍, 醍醐灌...2015-10-23
  • 详解vue+vueRouter+webpack的简单实例

    这篇文章主要介绍了详解vue+vueRouter+webpack的简单实例,非常具有实用价值,需要的朋友可以参考下...2017-06-24
  • 基于jquery实现彩色投票进度条代码解析

    这篇文章主要介绍了基于jquery实现彩色投票进度条代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-27
  • vue cli3 实现分环境打包的步骤

    这篇文章主要介绍了vue cli3 实现分环境打包的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-12
  • webpack搭建脚手架打包TypeScript代码

    本文主要介绍了webpack搭建脚手架打包TypeScript代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-21
  • 手把手教你如何编译打包video.js

    这篇文章主要介绍了编译打包video.js的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2020-12-09
  • Vue打包后页面出现空白解决办法

    本文主要介绍了Vue打包后页面出现空白解决办法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-03
  • Shell脚本构建Docker 半自动化编译打包发布应用操作

    这篇文章主要介绍了Shell脚本构建Docker 半自动化编译打包发布应用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-30
  • Qt使用windeployqt工具实现程序打包发布方法

    本文主要介绍了Qt使用windeployqt工具实现程序打包发布方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-11-01
  • Java jar打包工具使用方法步骤解析

    这篇文章主要介绍了Java jar打包工具使用方法步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-15
  • 教你怎么用Idea打包jar包

    这篇文章主要介绍了教你怎么用Idea打包jar包,文中有非常详细的代码示例,对刚开始使用IDEA的小伙伴们很有帮助哟,需要的朋友可以参考下...2021-05-12
  • Python selenium 自动化脚本打包成一个exe文件(推荐)

    这篇文章主要介绍了Python selenium 自动化脚本打包成一个exe文件,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-04-27
  • Android Studio中一套代码多渠道打包的实现方法

    这篇文章主要介绍了Android Studio中一套代码多渠道打包的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2020-05-25
  • python脚本打包后无法运行exe文件的解决方案

    这篇文章主要介绍了python脚本打包后无法运行exe文件的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-17