如何在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 相关文章推荐
使用jQuery轻松实现Ajax的实例代码
Aug 16 Javascript
jquery js 重置表单 reset()具体实现代码
Aug 05 Javascript
模拟一个类似百度google的模糊搜索下拉列表
Apr 15 Javascript
JavaScript中的console.log()函数详细介绍
Dec 29 Javascript
JS实现表格数据各种搜索功能的方法
Mar 03 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
Sep 05 Javascript
利用浮层使select不可选的实现方法
Dec 03 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
jQuery操作之效果详解
May 19 jQuery
vue 1.0 结合animate.css定义动画效果
Jul 11 Javascript
小程序获取周围IBeacon设备的方法
Oct 31 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
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 MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
PHP clearstatcache()函数详解
2010/03/02 PHP
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
PHP JWT初识及其简单示例
2018/10/10 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
cookie中的path与domain属性详解
2013/12/18 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
Python列表生成器的循环技巧分享
2015/03/06 Python
python统计cpu利用率的方法
2015/06/02 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
如何使用localstorage代替cookie实现跨域共享数据问题
2018/04/18 HTML / CSS
意大利在线大学图书馆:Libreria universitaria
2019/07/16 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
会计专业毕业生自我评价
2013/09/25 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
《数星星的孩子》教学反思
2014/04/11 职场文书
党员干部一句话承诺
2014/05/30 职场文书
2014年团委工作总结
2014/11/13 职场文书
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS