12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import { readdir, stat } from "fs";
- import type { Plugin } from "vite";
- import dayjs, { Dayjs } from "dayjs";
- import { sum } from "lodash-unified";
- import duration from "dayjs/plugin/duration";
- import { green, blue, bold } from "picocolors";
- dayjs.extend(duration);
- const staticPath = "dist";
- const fileListTotal: number[] = [];
- const recursiveDirectory = (folder: string, callback: Function): void => {
- readdir(folder, (err, files: string[]) => {
- if (err) throw err;
- let count = 0;
- const checkEnd = () => {
- ++count == files.length && callback();
- };
- files.forEach((item: string) => {
- stat(folder + "/" + item, async (err, stats) => {
- if (err) throw err;
- if (stats.isFile()) {
- fileListTotal.push(stats.size);
- checkEnd();
- } else if (stats.isDirectory()) {
- recursiveDirectory(`${staticPath}/${item}/`, checkEnd);
- }
- });
- });
- files.length === 0 && callback();
- });
- };
- const formatBytes = (a: number, b?: number): string => {
- if (0 == a) return "0 Bytes";
- const c = 1024,
- d = b || 2,
- e = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"],
- f = Math.floor(Math.log(a) / Math.log(c));
- return parseFloat((a / Math.pow(c, f)).toFixed(d)) + " " + e[f];
- };
- export function viteBuildInfo(): Plugin {
- let config: { command: string };
- let startTime: Dayjs;
- let endTime: Dayjs;
- return {
- name: "vite:buildInfo",
- configResolved(resolvedConfig: { command: string }) {
- config = resolvedConfig;
- },
- buildStart() {
- console.log(
- bold(
- green(
- `👏欢迎使用${blue(
- "[vue-pure-admin]"
- )},如果您感觉不错,记得点击后面链接给个star哦💖 https://github.com/xiaoxian521/vue-pure-admin`
- )
- )
- );
- if (config.command === "build") {
- startTime = dayjs(new Date());
- }
- },
- closeBundle() {
- if (config.command === "build") {
- endTime = dayjs(new Date());
- recursiveDirectory(staticPath, () => {
- console.log(
- bold(
- green(
- `恭喜打包完成🎉(总用时${dayjs
- .duration(endTime.diff(startTime))
- .format("mm分ss秒")},打包后的大小为${formatBytes(
- sum(fileListTotal)
- )})`
- )
- )
- );
- });
- }
- }
- };
- }
|