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

這篇文章中,咱們主要研究的是如何在Node中打印出彩色文字,瀏覽器的只是附帶。node

1、經常使用場景:

一、在Wepack的打包過程當中,顯示打包完成後,控制檯輸出了幾行注目的彩色文字信息。c++

二、在cli工具中,提示的信息有時會附帶紅色或綠色的提示。npm

2、瀏覽器的彩色console

在瀏覽器中,要打印彩色的log很簡單,以下:瀏覽器

console.log('%c%s', 'color: red; font-size: 20px', 'red')
// %c表明樣式,%s表明字符串
// 樣式設置後,後面的字符串才能被渲染
複製代碼

那這樣子,咱們是否是就能夠直接挪到node上了呢?bash

急衝衝的挪過去一試驗,然而顯示的仍是無情的白色文字。工具

那在Node上要怎麼解決這個問題呢?性能

3、Shell的彩色console

一、c語言與輸出

在講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;
}
複製代碼

4、Node的彩色打印

Node的實現,是基於c語言的,所以Node的彩色打印其實與c語言相似。

一、console.log的實現

Node中的console.log的底層是process.stdout,而process.stdout的底層又是基於Stream實現的,再進一步Stream的底層指向了.cc的c語言文件。到這裏,你們也就明白了爲何使用c/c++的性能好了,可是,做爲與系統最爲接近的高級語言,c的強大和危險是並存的。

二、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)
複製代碼

三、chalk的打印

咱們知道要如何實現了,可是咱們並記不住每一個符號怎麼辦?

這裏已經有造好的輪子了:chalk

安裝:npm i chalk

使用:console.log(chalk.red('red'))

是否是很眼熟?你猜的沒錯,chalk.red('red')最終得到的就是 \033[31m red \033[0m 字符串。

好了,文章到此結束,但願對正在看的你有幫助~

掘金:juejin.im/user/5b2b02…

我的博客: failte.cn

公衆號:

qrcode
相關文章
相關標籤/搜索