如何在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 相关文章推荐
Chrome中模态对话框showModalDialog返回值问题的解决方法
May 25 Javascript
用JQuery实现全选与取消的两种简单方法
Feb 22 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
Aug 19 Javascript
js读取并解析JSON类型数据的方法
Nov 14 Javascript
AngularJS中使用HTML5手机摄像头拍照
Feb 22 Javascript
Javascript基础_标记文字的实现方法
Jun 14 Javascript
微信小程序 小程序制作及动画(animation样式)详解
Jan 06 Javascript
简单实现js无缝滚动效果
Feb 05 Javascript
js实现一键复制功能
Mar 16 Javascript
JavaScript注册时密码强度校验代码
Jun 30 Javascript
详解Vue组件实现tips的总结
Nov 01 Javascript
简单的三步vuex入门
May 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://input使用示例(php发送图片流到服务器)
2013/12/25 PHP
JavaScript 数组运用实现代码
2010/04/13 Javascript
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
python client使用http post 到server端的代码
2013/02/10 Python
python常规方法实现数组的全排列
2015/03/17 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
Html5导航栏吸顶方案原理与对比实现
2020/06/10 HTML / CSS
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
HashMap和Hashtable的区别
2013/05/18 面试题
运动会通讯稿400字
2014/01/28 职场文书
体育节口号
2014/06/19 职场文书
评职称个人总结
2015/03/05 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
vue实现移动端div拖动效果
2022/03/03 Vue.js
css3 文字断裂效果
2022/04/22 HTML / CSS