如何在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的对话框详解与参数
Mar 08 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
Aug 29 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
Jan 06 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
Apr 25 Javascript
对JavaScript中this指针的新理解分享
Jan 31 Javascript
JS中prototype的用法实例分析
Mar 19 Javascript
javascript实现的右下角弹窗实例
Apr 24 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
Nov 04 Javascript
vue不通过路由直接获取url中参数的方法示例
Aug 24 Javascript
图文介绍Vue父组件向子组件传值
Feb 17 Javascript
浅析Vue 生命周期
Jun 21 Javascript
解决vue自定义全局消息框组件问题
Nov 22 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 mvc开发模式的感想
2011/06/28 PHP
php最简单的删除目录与文件实现方法
2014/11/28 PHP
php实现多城市切换特效
2015/08/09 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
js判断变量是否未定义的代码
2020/03/28 Javascript
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
angular实现图片懒加载实例代码
2017/06/08 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
python处理PHP数组文本文件实例
2014/09/18 Python
Python实现子类调用父类的方法
2014/11/10 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
Python类及获取对象属性方法解析
2020/06/15 Python
Python生成器generator原理及用法解析
2020/07/20 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
大三在校生电子商务求职信
2013/10/29 职场文书
中学门卫岗位职责
2013/12/26 职场文书
优秀幼教自荐信
2014/02/03 职场文书
出生公证书样本
2014/04/04 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
离婚协议书样本
2015/01/26 职场文书
法制工作总结2015
2015/07/23 职场文书
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏
python中的random模块和相关函数详解
2022/04/22 Python