如何在Node和浏览器控制台中打印彩色文字


Posted in Javascript onJanuary 09, 2020

这篇文章中,我们主要研究的是如何在Node中打印出彩色文字,浏览器的只是附带。

一、常用场景:

1、在Wepack的打包过程中,显示打包完成后,控制台输出了几行注目的彩色文字信息。

2、在cli工具中,提示的信息有时会附带红色或绿色的提示。

二、浏览器的彩色console

在浏览器中,要打印彩色的log很简单,如下:

console.log('%c%s', 'color: red; font-size: 20px', 'red')
// %c代表样式,%s代表字符串
// 样式设置后,后面的字符串才能被渲染

那这样子,我们是不是就可以直接挪到node上了呢?

急冲冲的挪过去一试验,然而显示的还是无情的白色文字。

那在Node上要怎么解决这个问题呢?

三、Shell的彩色console

1、c语言与输出

在讲Node的彩色打印前,我们先来温习一波c语言吧。

在c语言中,\033是一个转义字符,这里注意033表示的是8进制的数字,表示换码。

当这个字符串输出时,表示对屏幕的控制。使用时可在后接一个控制字符串。

2、控制字符串组合

所有的控制字符串组合如下:

\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30~37m 这个区间都可以设置字体色
\33[40~47m 这个区间都可以设置背景色
\33[90~97m 这个区间都可以设置高亮的字体色
\33[100~107m 这个区间都可以设置高亮的背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标

3、使用例子

例1:单字体颜色

#include <stdio.h>
int main(){
  char black[]="\033[30m black \033[0m";
  char red[]="\033[31m red \033[0m";
  char green[]="\033[32m green \033[0m";
  char yellow[]="\033[33m yellow \033[0m";
  char blue[]="\033[34m blue \033[0m";
  char popurse[]="\033[35m popurse \033[0m";
  char indigo[]="\033[36m indigo \033[0m";
  char white[]="\033[37m white \033[0m";
  printf("%s%s%s%s%s%s%s%s", black, red, green, yellow, blue, popurse, indigo, white);
  return 0;
}

例2:单背景颜色

#include <stdio.h>
int main(){
  char black[]="\033[40m black \033[0m";
  char red[]="\033[41m red \033[0m";
  char green[]="\033[42m green \033[0m";
  char yellow[]="\033[43m yellow \033[0m";
  char blue[]="\033[44m blue \033[0m";
  char popurse[]="\033[45m popurse \033[0m";
  char indigo[]="\033[46m indigo \033[0m";
  char white[]="\033[47m white \033[0m";
  printf("%s%s%s%s%s%s%s%s", black, darkred, green, yellow, blue, popurse, indigo, white);
  return 0;
}

例3:自由组合

#include <stdio.h>
int main(){
  char mix[]="\033[31;42m blue font red bg \033[0m";
  printf("%s", mix);
  return 0;
}

四、Node的彩色打印

Node的实现,是基于c语言的,因此Node的彩色打印其实与c语言类似。

1、console.log的实现

Node中的console.log的底层是process.stdout,而process.stdout的底层又是基于Stream实现的,再进一步Stream的底层指向了.cc的c语言文件。到这里,大家也就明白了为什么使用c/c++的性能好了,但是,作为与系统最为接近的高级语言,c的强大和危险是并存的。

2、Node的打印

知道了console.log的实现基础,我们可以大胆的输出以下代码:

var black="\033[30m black \033[0m";
var red="\033[31m red \033[0m";
var green="\033[32m green \033[0m";
var yellow="\033[33m yellow \033[0m";
var blue="\033[34m blue \033[0m";
var popurse="\033[35m popurse \033[0m";
var indigo="\033[36m indigo \033[0m";
var white="\033[37m white \033[0m";
console.log(black, red, green, yellow, blue, popurse, white);

毫无意外,我们打印出了彩色的log。

同样的,按照c语言的混搭,有:

var mix="\033[37;42m white \033[0m";
console.log(mix);

除了用console.log,我们也可以直接使用process.stdout.write()实现:

var mix="\033[37;42m white \033[0m";
process.stdout.write(mix)

3、chalk的打印

我们知道要如何实现了,但是我们并记不住每个符号怎么办?

这里已经有造好的轮子了:chalk

安装:npm i chalk

使用:console.log(chalk.red('red'))

是不是很眼熟?你猜的没错,chalk.red('red')最终获得的就是 \033[31m red \033[0m 字符串。

好了,文章到此结束,希望对正在看的你有帮助~也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中的History历史对象
Jan 16 Javascript
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
Nov 03 Javascript
禁止选中文字兼容IE、Chrome、FF等
Sep 04 Javascript
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
Jan 08 Javascript
简单实现jQuery级联菜单
Jan 09 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
Jan 17 Javascript
老生常谈js数据类型
Aug 03 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
Jan 21 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
Jan 19 Javascript
解决node终端下运行js文件不支持ES6语法
Apr 04 Javascript
JS setTimeout与setInterval的区别
Apr 20 Javascript
JavaScript复制变量三种方法实例详解
Jan 09 #Javascript
js实现左右轮播图
Jan 09 #Javascript
Vue-axios-post数据后端接不到问题解决
Jan 09 #Javascript
一看就会的vuex实现登录验证(附案例)
Jan 09 #Javascript
Websocket 向指定用户发消息的方法
Jan 09 #Javascript
Vue快速实现通用表单验证的示例代码
Jan 09 #Javascript
JS实现商品橱窗特效
Jan 09 #Javascript
You might like
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
动态为事件添加js代码示例
2009/02/15 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
在js中做数字字符串补0(js补零)
2017/03/25 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
python如何实现word批量转HTML
2020/09/30 Python
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
烹调加工管理制度
2014/02/04 职场文书
创先争优活动方案
2014/02/12 职场文书
医疗纠纷协议书
2014/04/16 职场文书
公司经理任命书
2014/06/05 职场文书
2014年学前班工作总结
2014/12/08 职场文书
2015年母亲节寄语
2015/03/23 职场文书
法定代表人免职证明
2015/06/24 职场文书
2016年党员创先争优公开承诺书
2016/03/25 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA