1. 程式人生 > 程式設計 >如何在Node和瀏覽器控制檯中列印彩色文字

如何在Node和瀏覽器控制檯中列印彩色文字

這篇文章中,我們主要研究的是如何在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",darkred,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,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 字串。

好了,文章到此結束,希望對正在看的你有幫助~也希望大家多多支援我們。