console.log——NPM库

9a69fede8b2044a79dd834e3e48f20b4.png前期回顾   

Vue3 + TS 项目实战 - 后台管理系统 - 按钮权限_vue3+ts后台管理-CSDN博客

目录

🚩不使用NPM插件的方式

第一步:创建log函数-源码 

第二步:注册到window上

第三步:扩展Window接口

第四步:确保类型文件被TypeScript识别

第五步:使用window.log而不是log

 🤖 使用NPM库方式

第一步:使用 npm 安装

第二步:使用

 ❤️ 结语 


前言:控制台打印平平无奇,做一个美化的Hooks!

🚩不使用NPM插件的方式

第一步:创建log函数-源码 

位置:src\utils\Hooks\beautifyLog.ts

/*** 美化打印实现方法*/
const prettyLog = () => {const isProduction =import.meta.env.MODE === "production" ||process.env.NODE_ENV === "production";const isEmpty = (value: any) => {return value == null || value === undefined || value === "";};const prettyPrint = (title: string, text: string, color: string) => {if (isProduction) return;console.log(`%c ${title} %c ${text} %c`,`background:${color};border:1px solid ${color}; padding: 1px; border-radius: 2px 0 0 2px; color: #fff;`,`border:1px solid ${color}; padding: 1px; border-radius: 0 2px 2px 0; color: ${color};`,"background:transparent");};const info = (textOrTitle: string, content = "") => {const title = isEmpty(content) ? "Info" : textOrTitle;const text = isEmpty(content) ? textOrTitle : content;prettyPrint(title, text, "#909399");};const error = (textOrTitle: string, content = "") => {const title = isEmpty(content) ? "Error" : textOrTitle;const text = isEmpty(content) ? textOrTitle : content;prettyPrint(title, text, "#F56C6C");};const warning = (textOrTitle: string, content = "") => {const title = isEmpty(content) ? "Warning" : textOrTitle;const text = isEmpty(content) ? textOrTitle : content;prettyPrint(title, text, "#E6A23C");};const success = (textOrTitle: string, content = "") => {const title = isEmpty(content) ? "Success " : textOrTitle;const text = isEmpty(content) ? textOrTitle : content;prettyPrint(title, text, "#67C23A");};const table = (dataPaylod: Array<{}>) => {const data = dataPaylod;console.log("%c id%c name%c age","color: white; background-color: black; padding: 2px 10px;","color: white; background-color: black; padding: 2px 10px;","color: white; background-color: black; padding: 2px 10px;");data.forEach((row: any) => {console.log(`%c ${row.id} %c ${row.name} %c ${row.age} `,"color: black; background-color: lightgray; padding: 2px 10px;","color: black; background-color: lightgray; padding: 2px 10px;","color: black; background-color: lightgray; padding: 2px 10px;");});};const picture = (url: string, scale = 1) => {if (isProduction) return;const img = new Image();img.crossOrigin = "anonymous";img.onload = () => {const c = document.createElement("canvas");const ctx = c.getContext("2d");if (ctx) {c.width = img.width;c.height = img.height;ctx.fillStyle = "red";ctx.fillRect(0, 0, c.width, c.height);ctx.drawImage(img, 0, 0);const dataUri = c.toDataURL("image/png");console.log(`%c sup?`,`font-size: 1px;padding: ${Math.floor((img.height * scale) / 2)}px ${Math.floor((img.width * scale) / 2)}px;background-image: url(${dataUri});background-repeat: no-repeat;background-size: ${img.width * scale}px ${img.height * scale}px;color: transparent;`);}};img.src = url;};return {info,error,warning,success,picture,table,};
};
export interface PrettyLogFunctions {info: (textOrTitle: string, content?: string) => void;error: (textOrTitle: string, content?: string) => void;warning: (textOrTitle: string, content?: string) => void;success: (textOrTitle: string, content?: string) => void;picture: (url: string, scale?: number) => void;table: (dataPaylod: Array<{}>) => void;
}
// 创建打印对象
const log = prettyLog();
export default log;

第二步:注册到window上

在main.ts文件中,确保您将log正确地绑定到了window对象上:

位置;main.ts

import log from './utils/Hooks/beautifyLog';
window.log = log;

第三步:扩展Window接口

在项目中创建一个新的TypeScript声明文件(例如src/types/env.d.ts),用于扩展全局Window对象的类型定义:

位置:src\types\global.d.ts

import { PrettyLogFunctions } from '../utils/Hooks/beautifyLog';// 声明文件,*.vue 后缀的文件交给 vue 模块来处理
declare module '*.vue' {import type { DefineComponent } from 'vue';const component: DefineComponent<{}, {}, any>;export default component;
}// 声明文件,定义全局变量
declare global {interface Window {log: PrettyLogFunctions;}
}

第四步:确保类型文件被TypeScript识别

"include": ["src/**/*.ts","src/**/*.d.ts","src/types/**/*.d.ts","src/**/*.tsx","src/**/*.vue","src/views/visualLargeScreen/complianceRiskSituation/perfect-auto-screen-fit.js"],

第五步:使用window.log而不是log

<script setup>
import { onMounted } from 'vue';onMounted(() => {window.log.info('Component mounted');
});
</script>

这样,您就可以在不引入任何额外模块的情况下,在全局范围内使用prettyLog的功能。

 window.log有以下方法:

         info,

        error,

        warning,

        success,

        picture,

        table,

 🤖 使用NPM库方式

第一步:使用 npm 安装

npm install pretty-log-plugin

第二步:使用

第一种方式 “引入”

import log from "pretty-log-plugin";
log.info("Hello, world!");

第二种方式:挂在window

参考上面

❤️ 结语 

7730e2bd39d64179909767e1967da702.jpeg

 _______________________________  期待再见  _______________________________

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMake是怎么找到Qt相关模块的

当我们使用QT创建了一个CMake项目后&#xff0c;我们尝试使用CMake编译时&#xff0c;会遇到找不到Qt的模块的问题&#xff0c; find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets WebSockets WebEngineWidgets) 复制代码 深入了解find_package之后&#xff0c;我们就…

南卡、韶音、Cleer开放式耳机如何选?全面对比测评拒绝智商税!

随着开放式耳机在生活中日益流行&#xff0c;市场上的多样化选择有时也伴随着质量参差不齐的问题&#xff0c;部分产品因成本控制而牺牲了材质和音质&#xff0c;给消费者在寻找高质量耳机时增添了困扰。 作为一名耳机评测领域的从业者&#xff0c;近期我投入大量精力对多款开…

Softing线上研讨会 | 使用Softing smartLink SW-HT将AB PLC下的HART设备连接到艾默生AMS设备管理器

| (免费) 线上研讨会时间&#xff1a;2024年6月25日 14:00~14:45 / 22:30~23:15 艾默生AMS设备管理器凭借其全面功能、优秀诊断能力、兼容性以及远程监控和管理功能&#xff0c;在过程工业中被证明是一款先进的工厂资产管理工具&#xff0c;可用于设备配置、诊断和监控、仪表校…

2023年信息素养大赛小学组C++智能算法复赛真题

今天给大家分享2023年全国青少年信息素养大赛小学组C智能算法挑战赛复赛里面的一套真题&#xff0c;希望有助于大家了解复赛的难度及备考。 其他真题下载&#xff1a;网盘-真题-信息素养大赛

富格林:阻挠欺诈套路需要明辨

富格林认为&#xff0c;现货交易平台的重要性对投资者们来说众所周知&#xff0c;但操作的软件也同样重要。投资者在选好平台后&#xff0c;还需要下载软件来进行交易。富格林提醒&#xff0c;正规操作可以阻挠欺诈被骗&#xff0c;投资者应慎重选择操作软件。下面富格林将给投…

MongoDB 原子操作:确保数据一致性和完整性的关键

在 MongoDB 中&#xff0c;原子操作是指可以一次性、不可分割地执行的数据库操作。这些操作能够保证在多个并发操作中不会出现数据不一致或者丢失的情况&#xff0c;确保数据库的数据完整性和一致性。 基本语法 MongoDB 的原子操作通常与更新操作相关&#xff0c;其基本语法如…

clocking wizard IP核通过AXI4-Lite接口实现动态重新配置应用实例

在最近的FPGA应用中&#xff0c;应用到了基于Zynq 7000的Uart串口设计&#xff0c;为了让串口的时钟更精确&#xff0c;采用了外部时钟模式&#xff0c;如下图所示。外部时钟连接到了Clocking Wizard IP核的输出端。 在串口通信时&#xff0c;发现串口有错码出现。例如&#xf…

triton之paged attention

一 原理 图解大模型计算加速系列之&#xff1a;vLLM核心技术PagedAttention原理 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/691038809 二 源码分析 1 测试参数设置 test_paged_attention(num_seqs32,num_heads(64, 64),head_size64,block_size16,dtypetorch.float16,…

C语言知识大纲

一、基础 (一)变量定义和使用 (二)数据类型的字节数 (三)变量转换 (四)程序主要结构 (五)if和else判断 (六)switch判断 (七)while循环 (八)do while循环 (九)for循环 (十)基本输入输出 (十一)数组定义和使用 (十二)函数定义和使用 (十三)指针 (十四)多级指针 (十…

奇门遁甲古籍1《奇门秘术》(双页版)PDF电子书

《奇门秘术》 全书共102页 时间有限&#xff0c;仅上传部分图片&#xff0c;结缘私&#xff01;

数据结构—队列(C语言实现)

文章目录 前言一、队列的概念二、队列的实现Queue.hQueue.c 三、设计循环队列问题数组实现链表实现 总结 前言 嗨喽喽&#xff01;&#xff01;小伙伴们&#xff0c;大家好哇&#xff0c;欢迎来到我的博客&#xff01; 今天将要分享的是另一种数据结构—队列&#xff0c;以及…

Transformer详解(5)-编码器

Transformer编码器 import copy import torch from torch import nn from norm import Norm from multi_head_attention import MultiHeadAttention from feed_forward import FeedForward from pos_encoder import PositionalEncoderdef get_clones(module, N):""&…

低空经济蓬勃发展

我国低空经济蓄势起飞从2021年2月首次将“低空经济”写入国家规划&#xff0c;到2023年12月正式将低空经济定位为战略性新兴产业&#xff0c;国家层面鼓励并积极推动低空经济发展。今年政府工作报告提出&#xff0c;积极打造生物制造、商业航天、低空经济等新增长引擎。截至3月…

C 语言设计模式(创建型)

文章目录 工厂模式场景使用结构体示例使用函数指针示例线程安全示例 单例模式场景示例线程安全示例 建造者模式场景示例 原型模式场景示例 工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种创建对象的最佳方式&#xf…

汇编原理(三)编程

源程序&#xff1a; 汇编指令&#xff1a;有对应的机器码与其对应 伪指令&#xff1a;无对应的机器码&#xff0c;是由编译器来执行的指令&#xff0c;编译器根据伪指令来进行相关的编译工作。 ex1:XXX segment、XXX ends这两个是一对成对使用的伪指令&#xff0c;且必须会被用…

thingsboard 仪表盘部件如何解析设备RCP应答

对设备添加仪表部件Switch control后&#xff0c;开关部件默认会发送getValue v1/devices/me/rpc/request/0 {"method":"getValue","params":null} 此时设备收到请求后回复一个“value”值&#xff0c;“value”可以是任何字符串 v1/devices/…

spark机器学习之协同过滤

协同过滤算法 协同过滤是一类基于用户行为数据的推荐算法,它的核心思想是利用用户的历史行为数据(比如评分、购买、点击等)来发现用户之间的相似性或者物品之间的相似性,从而给用户推荐他们可能感兴趣的物品。协同过滤算法通常分为两种类型:基于用户的协同过滤和基于物品…

打工人好用的大模型问答,还需要一款可靠的文档解析工具

如果说三四年前&#xff0c;我们对AI的展望还停留在科幻片的话&#xff0c;现在&#xff0c;通向AI智能的路径已经初现端倪。各行各业的朋友们不约而同地嗅到了大模型带来的生产方式变革气息。 LLM宣布了AI时代的正式到来。 2022年11月30日&#xff0c;ChatGPT发布&#xff0…

“智能体时代:探索无限可能——零代码构建智能教练智能体“

随着智能体技术的飞速发展&#xff0c;各个领域正经历着空前的变革和新的发展机遇。作为人工智能的一个关键组成部分&#xff0c;智能体以其自我驱动、智能响应和适应能力&#xff0c;逐渐深入到我们日常生活的各个层面&#xff0c;成为促进社会发展和科技进步的新引擎。 顺应这…

Linux 文件权限管理详解

查看文件权限 使用ls -l命令&#xff1a; 打开终端&#xff0c;进入文件所在的目录&#xff0c;然后输入以下命令查看文件或目录的详细信息&#xff0c;包括权限、所有者、所属组、大小、修改日期等&#xff1a; ls -l 文件或目录名 示例&#xff1a; ls -l myfile.txt ls -l m…