這篇文章中,咱們主要研究的是如何在Node中打印出彩色文字,瀏覽器的只是附帶。node
一、在Wepack的打包過程當中,顯示打包完成後,控制檯輸出了幾行注目的彩色文字信息。c++
二、在cli工具中,提示的信息有時會附帶紅色或綠色的提示。npm
在瀏覽器中,要打印彩色的log很簡單,以下:瀏覽器
console.log('%c%s', 'color: red; font-size: 20px', 'red')
// %c表明樣式,%s表明字符串
// 樣式設置後,後面的字符串才能被渲染
複製代碼
那這樣子,咱們是否是就能夠直接挪到node上了呢?bash
急衝衝的挪過去一試驗,然而顯示的仍是無情的白色文字。工具
那在Node上要怎麼解決這個問題呢?性能
在講Node的彩色打印前,咱們先來溫習一波c語言吧。字體
在c語言中,\033是一個轉義字符,這裏注意033表示的是8進制的數字,表示換碼。ui
當這個字符串輸出時,表示對屏幕的控制。使用時可在後接一個控制字符串。spa
全部的控制字符串組合以下:
\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 顯示光標
複製代碼
例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的實現,是基於c語言的,所以Node的彩色打印其實與c語言相似。
Node中的console.log的底層是process.stdout,而process.stdout的底層又是基於Stream實現的,再進一步Stream的底層指向了.cc的c語言文件。到這裏,你們也就明白了爲何使用c/c++的性能好了,可是,做爲與系統最爲接近的高級語言,c的強大和危險是並存的。
知道了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)
複製代碼
咱們知道要如何實現了,可是咱們並記不住每一個符號怎麼辦?
這裏已經有造好的輪子了:chalk
安裝:npm i chalk
使用:console.log(chalk.red('red'))
是否是很眼熟?你猜的沒錯,chalk.red('red')最終得到的就是 \033[31m red \033[0m
字符串。
好了,文章到此結束,但願對正在看的你有幫助~
我的博客: failte.cn
公衆號: