如何在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 相关文章推荐
基于MVC3方式实现下拉列表联动(JQuery)
Sep 02 Javascript
Node.js模块加载详解
Aug 16 Javascript
JS实现Select的option上下移动的方法
Mar 01 Javascript
JS获取url参数、主域名的方法实例分析
Aug 03 Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 Javascript
原生JS和jQuery操作DOM对比总结
Jan 19 Javascript
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
Express框架之connect-flash详解
May 31 Javascript
使用clipboard.js实现复制功能的示例代码
Oct 16 Javascript
基于vue.js快速搭建图书管理平台
Oct 29 Javascript
javascript导出csv文件(excel)的方法示例
Aug 25 Javascript
Vue axios 跨域请求无法带上cookie的解决
Sep 08 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
javascript eval(func())使用示例
2013/12/05 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
Python网络爬虫实例讲解
2016/04/28 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
Django的models中on_delete参数详解
2019/07/16 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
教师找工作推荐信
2013/11/23 职场文书
公证书标准格式
2014/04/10 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
班委竞选稿范文
2015/11/21 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python
python操作xlsx格式文件并读取
2021/06/02 Python
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js