วิธีการเปลี่ยนสีฟอนต์คอนโซลของ node.js?


570

ฉันต้องเปลี่ยนสีพื้นหลังคอนโซลเป็นสีขาวเนื่องจากปัญหาสายตา แต่ตัวอักษรเป็นสีเทาและทำให้ข้อความอ่านไม่ได้ ฉันจะเปลี่ยนได้อย่างไร


4
ในที่เดียวกับที่คุณเคยเปลี่ยนสีพื้นหลังคุณสามารถเปลี่ยนสีอื่นได้
Dan D.

@hippietrail พวกคุณพบทางออกที่ดีกว่าหรือคุณสามารถยอมรับคำตอบของคำถามนี้ได้หรือไม่?
nelsonic

คุณจะทำสิ่งนี้ได้อย่างไรใน pure Node.js ไม่มีสีหรือแพ็คเกจอื่น ๆ
Costa

1
ฉันมีปัญหาเดียวกัน ฉันสงสัยว่า @Viclib กำลังใช้ windows (เหมือนฉัน) ซึ่งเป็นสาเหตุที่คำแนะนำในการเปลี่ยนสีของเทอร์มินัลเป็นแนวคิดต่างประเทศ พรอมต์คำสั่ง windows อนุญาตให้เปลี่ยนพื้นหน้า 2 สีและสีพื้นหลัง 2 สี โหนดใช้สีอื่นซึ่ง windows command prompt ไม่สามารถกำหนดได้
Greg Woods

2
ต่อมาฉันค้นพบว่าแบบจำลองทางจิตของฉันสำหรับการทำงานของพรอมต์คำสั่งของ Windows นั้นผิดอย่างสิ้นเชิง ฉันถือว่าไม่ถูกต้อง (เนื่องจาก UI แย่มาก) ที่คุณสามารถเปลี่ยนสีพื้นหน้าและสีพื้นหลังได้เท่านั้น นี่เป็นสิ่งที่ผิด แอพคอนโซลทั้ง 16 สีสามารถใช้งานได้และจำเป็นต้องเลือกสีที่เหมาะสมสำหรับทั้ง 16 สีและสำหรับกระเบื้องสี 1 เป็นพื้นหลังเสมอ (และไทล์ 9 สำหรับ "พื้นหลังป๊อปอัป") นี่เป็นการเปิดเผยให้ฉันฉันเขียนโพสต์บล็อก (เหตุการณ์ที่หายากแน่นอน) gregwoods.co.uk/2015/04/…
Greg Woods

คำตอบ:


1150

ด้านล่างคุณจะพบการอ้างอิงสีของข้อความถึงคำสั่งเมื่อรันแอปพลิเคชัน node.js:

console.log('\x1b[36m%s\x1b[0m', 'I am cyan');  //cyan
console.log('\x1b[33m%s\x1b[0m', stringToMakeYellow);  //yellow

หมายเหตุ%sคือที่ที่อยู่ในสตริง (อาร์กิวเมนต์ที่สอง) ได้รับการฉีด \x1b[0mรีเซ็ตสีของเทอร์มินัลเพื่อไม่ให้เป็นสีที่เลือกอีกต่อไปหลังจากจุดนี้

การอ้างอิงสี

Reset = "\x1b[0m"
Bright = "\x1b[1m"
Dim = "\x1b[2m"
Underscore = "\x1b[4m"
Blink = "\x1b[5m"
Reverse = "\x1b[7m"
Hidden = "\x1b[8m"

FgBlack = "\x1b[30m"
FgRed = "\x1b[31m"
FgGreen = "\x1b[32m"
FgYellow = "\x1b[33m"
FgBlue = "\x1b[34m"
FgMagenta = "\x1b[35m"
FgCyan = "\x1b[36m"
FgWhite = "\x1b[37m"

BgBlack = "\x1b[40m"
BgRed = "\x1b[41m"
BgGreen = "\x1b[42m"
BgYellow = "\x1b[43m"
BgBlue = "\x1b[44m"
BgMagenta = "\x1b[45m"
BgCyan = "\x1b[46m"
BgWhite = "\x1b[47m"

แก้ไข:

ตัวอย่างเช่น\x1b[31mเป็นลำดับหลบหนีที่จะถูกขัดขวางโดยสถานีของคุณและสั่งให้เปลี่ยนเป็นสีแดง ความจริงแล้ว\x1bเป็นรหัสสำหรับอักขระควบคุมที่ไม่สามารถพิมพ์ escapeได้ ลำดับ escape เกี่ยวข้องกับสีและสไตล์เท่านั้นที่รู้จักกันในชื่อรหัสหลบหนี ANSIและเป็นมาตรฐานดังนั้นพวกเขาจึงควรทำงานบนแพลตฟอร์มใด ๆ

Wikipedia มีการเปรียบเทียบว่าเทอร์มินัลแสดงสีที่แตกต่างกันอย่างไร https://en.wikipedia.org/wiki/ANSI_escape_code#Colors


42
ฉันยอมรับคำถามนี้เพราะเป็นสิ่งที่ขี้เกียจที่สุดที่ทำงานได้มีหลายสีและไม่มีการพึ่งพา หากคุณต้องการโซลูชันที่เรียบง่ายขึ้นพร้อมการพึ่งพาตรวจสอบคำตอบของ @ nelsonic ซึ่งแนะนำ libs ที่ตรงไปตรงมามาก
MaiaVictor

7
คุณพบข้อมูลอ้างอิงนี้จากที่ใด อักขระทุกตัวในค่าสีหมายถึงอะไร
giorgos.nl

10
@ giorgos29cm →ดูที่นี่ Btw เพิ่ม1;สีสดใสเช่น "\ x1b [1; 34m" == สีฟ้าอ่อน ...
Frank Nocke

2
ฉันจะป้องกันไม่ให้แสดงอักขระเหล่านี้เมื่อพิมพ์ไปยังไฟล์มากกว่าคอนโซลได้อย่างไร
Sky

1
อยากรู้อยากเห็นใน Windows 10 PowerShell สีเหลืองเปลี่ยนเป็นสีขาวหรือไม่ สีเหลืองสามารถทำงานได้ ชอล์กทำ อย่างไรก็ตามคำตอบนี้ช่วยฉันจากการเพิ่มชอล์คเป็นการอ้างอิงสำหรับบันทึกที่เลวร้ายสองสามตัวขอบคุณ!
webelo

318

มีหลายแพ็คเกจสำหรับการจัดรูปแบบข้อความคอนโซลใน Node.js ความนิยมมากที่สุดคือ:

การใช้งาน:


ชอล์ก:

const chalk = require('chalk');
console.log(chalk.red('Text in red'));

CLI-COLOR:

const clc = require('cli-color');
console.log(clc.red('Text in red'));

สี:

const colors = require('colors');
console.log('Text in red'.red);

หลายคนได้ตั้งข้อสังเกตความไม่พอใจของพวกเขาcolorsเปลี่ยนแปลงต้นแบบสตริง หากคุณต้องการให้ต้นแบบของคุณถูกทิ้งไว้ตามลำพังให้ใช้รหัสต่อไปนี้แทน:

const colors = require('colors/safe');
console.log(colors.red('Text in red'));

1
มันยังมีน้ำหนักเบารองรับสไตล์ได้อย่างง่ายดาย!
hippietrail

2
@devundef เห็นด้วยกับคุณในการเพิ่มวิธีการวัตถุ String อาจเป็นเรื่องที่ควรกล่าวถึงต่อผู้เขียนโมดูลบน GitHub และ / หรือแนะนำโมดูล / วิธีทางเลือกที่มีระดับความเรียบง่ายใกล้เคียงกัน
nelsonic

3
ในขณะที่ฉันยอมรับว่าคำตอบของ MattJohnson (การแทนที่สีเริ่มต้นของวิธี util.inpect - ดูด้านล่าง) จะดีกว่าการใช้โมดูลสีโมดูลสีต้องมีการตั้งค่าเป็นศูนย์และเหมาะกับความต้องการของผู้ใช้ส่วนใหญ่ซึ่งเพียงเปลี่ยนสีของคอนโซล .log เอาท์พุท แน่นอนว่า "messing with built-in" ไม่ดี (เห็นด้วย 100%) แต่ไม่มีโค้ดที่ปรับใช้ควรมีคำสั่ง console.log ดังนั้นให้ใช้ประโยชน์ได้ในเรื่องนี้ @devundef มีการเพิ่มเมธอด String พิเศษเข้าไปในระเบียบต้นแบบด้วยการทดสอบหน่วยของคุณหรือไม่
nelsonic

8
สีมีตอนนี้var colors = require('colors/safe');แล้วใช้colors.red('left string all alone')
Laoujin

1
พบดี @Laoujin - ครั้งต่อไปสามารถเสนอแก้ไขได้ ฉันได้แก้ไขตัวอย่างโค้ดสำหรับ Colors ในคำตอบ
nelsonic

155

หากคุณต้องการเปลี่ยนสีโดยตรงด้วยตัวคุณเองโดยไม่ต้องลองโมดูล

console.log('\x1b[36m', 'sometext' ,'\x1b[0m');

เป็นครั้งแรก\x1b[36mที่จะเปลี่ยนสีไปแล้วกลับไปสีขั้ว 360

นี่คือรายการรหัสสี ANSI


15
ขอบคุณที่พูดถึงวิธีรีเซ็ตสีกลับคืน
Vasyl Boroviak

25
นี่คือรหัสเทอร์มินัล ANSI, telepathy.freedesktop.org/doc/telepathy-glib/…
กินที่ Joes

1
แล้วการเปลี่ยนรูปแบบตัวอักษรเช่นตัวหนาสีแดงตัวเอียงสีเขียว
uzay95

1
ทำงานได้อย่างสมบูรณ์ไม่สับสนกับรหัสหนีแปดที่ถูกป้องกันในโหมดเข้มงวด
Florrie

70

เพื่อสีเอาท์พุทของคุณคุณสามารถใช้ตัวอย่างจากที่นั่น:
https://help.ubuntu.com/community/CustomizingBashPrompt

ยังมีส่วนสำคัญสำหรับ nodeJs

ตัวอย่างเช่นถ้าคุณต้องการเป็นส่วนหนึ่งของข้อความในสีแดงเพียงทำ console.log ด้วย:

"\033[31m this will be red \033[91m and this will be normal"

ฉันได้สร้างส่วนขยาย "colog" สำหรับ Node.js คุณสามารถติดตั้งโดยใช้:

npm install colog

Repo และ npm: https://github.com/dariuszp/colog


1
ฉันเชื่อว่า OP ไม่ต้องการพิมพ์ข้อความที่เฉพาะเจาะจงในสีที่เฉพาะเจาะจง แต่เทอร์มินัลเอาท์พุททั้งหมดจะเป็นสีที่แตกต่างกันไปตามค่าเริ่มต้นบางทีอาจเป็นสีดำที่ให้พื้นหลังสีขาว
cwoebker

จากนั้นเขาควรเปลี่ยนการตั้งค่าของเครื่องของเขา ฉันแน่ใจว่าเป็นไปได้บน Linux ไม่มีความคิดเกี่ยวกับ Windows
Dariuszp

14
\033[31mใช้งานได้ แต่ใช้\033[91mไม่ได้ สำหรับ Ubuntu \033[0mเทอร์มันควรจะเป็น
Redsandro

4
และการหลบหนีออกจากฐานแปดจะไม่ทำงาน:error: octal escape sequences "\033[31mServer ready @ #{app.get('port')}\033[91m" are not allowed
jcollum

4
\033[0mควรใช้เพื่อเปลี่ยนข้อความให้เป็นปกติไม่ใช่\033[91m
mollerhoj

31

นี่คือรายการของสีที่มีอยู่ (พื้นหลัง, เบื้องหน้า) ในคอนโซลที่มีการดำเนินการ (รีเซ็ต, ย้อนกลับ, ... )

const colors = {
 Reset: "\x1b[0m",
 Bright: "\x1b[1m",
 Dim: "\x1b[2m",
 Underscore: "\x1b[4m",
 Blink: "\x1b[5m",
 Reverse: "\x1b[7m",
 Hidden: "\x1b[8m",
 fg: {
  Black: "\x1b[30m",
  Red: "\x1b[31m",
  Green: "\x1b[32m",
  Yellow: "\x1b[33m",
  Blue: "\x1b[34m",
  Magenta: "\x1b[35m",
  Cyan: "\x1b[36m",
  White: "\x1b[37m",
  Crimson: "\x1b[38m" //القرمزي
 },
 bg: {
  Black: "\x1b[40m",
  Red: "\x1b[41m",
  Green: "\x1b[42m",
  Yellow: "\x1b[43m",
  Blue: "\x1b[44m",
  Magenta: "\x1b[45m",
  Cyan: "\x1b[46m",
  White: "\x1b[47m",
  Crimson: "\x1b[48m"
 }
};

ใช้มันดังต่อไปนี้:

 console.log(colors.bg.Blue, colors.fg.White , "I am white message with blue background", colors.Reset) ; 
 //don't forget "colors.Reset" to stop this color and return back to the default color

คุณยังสามารถติดตั้ง:

npm install console-info console-warn console-error --save-dev

IT จะให้ผลลัพธ์ใกล้กับคอนโซลของฝั่งไคลเอ็นต์:

ป้อนคำอธิบายรูปภาพที่นี่


1
ฉันใช้สิ่งเดียวกันและทำงานได้ดี แต่ด้วยเหตุผลบางอย่างติ่มไม่ทำอะไรเลย? ฉันต้องการเอฟเฟกต์สีเทาดังนั้นคิดว่าจะใช้สีขาวกับเอฟเฟกต์สลัวจะส่งผลให้สีเทา แต่พิมพ์สีขาวเท่านั้นไม่มีสลัว ความคิดใด ๆ
Angad

28

ต่อเอกสารฉบับนี้คุณสามารถเปลี่ยนสีขึ้นอยู่กับชนิดข้อมูลของการส่งออก:

// you'll need the util module
var util = require('util');

// let's look at the defaults: 
util.inspect.styles

{ special: 'cyan',
  number: 'yellow',
  boolean: 'yellow',
  undefined: 'grey',
  null: 'bold',
  string: 'green',
  date: 'magenta',
  regexp: 'red' }

// what are the predefined colors?
util.inspect.colors

{ bold: [ 1, 22 ],
  italic: [ 3, 23 ],
  underline: [ 4, 24 ],
  inverse: [ 7, 27 ],
  white: [ 37, 39 ],
  grey: [ 90, 39 ],
  black: [ 30, 39 ],
  blue: [ 34, 39 ],
  cyan: [ 36, 39 ],
  green: [ 32, 39 ],
  magenta: [ 35, 39 ],
  red: [ 31, 39 ],
  yellow: [ 33, 39 ] }

ดูเหมือนว่าจะเป็นรหัสหลบหนี ANSI SGR โดยที่หมายเลขแรกคือรหัสที่จะปล่อยก่อนที่จะส่งออกและหมายเลขที่สองคือรหัสที่จะปล่อยหลังจากนั้น ดังนั้นหากเราดูแผนภูมิของรหัส ANSI SGR บน Wikipediaคุณจะเห็นว่าส่วนใหญ่เริ่มต้นด้วยหมายเลข 30-37 เพื่อตั้งค่าสีพื้นหน้าและสิ้นสุดใน 39 เพื่อรีเซ็ตเป็นสีพื้นหน้าเริ่มต้น

สิ่งหนึ่งที่ฉันไม่ชอบคือความมืดของบางสิ่งเหล่านี้ โดยเฉพาะวันที่ ไปข้างหน้าและลองnew Date()ในคอนโซล สีม่วงแดงเข้มบนสีดำนั้นอ่านยากมาก ลองเปลี่ยนเป็นสีม่วงแดงแทน

// first define a new color
util.inspect.colors.lightmagenta = [95,39];

// now assign it to the output for date types
util.inspect.styles.date = 'lightmagenta';

ตอนนี้เมื่อคุณลองnew Date()เอาต์พุตสามารถอ่านได้มากขึ้น

หากคุณต้องการตั้งค่าสีโดยอัตโนมัติเมื่อเรียกใช้โหนดให้สร้างสคริปต์ที่เรียกใช้การจำลองเช่นนี้:

// set your colors however desired
var util = require('util');
util.inspect.colors.lightmagenta = [95,39];
util.inspect.styles.date = 'lightmagenta';

// start the repl    
require('repl').start({});

บันทึกแฟ้มนี้ (ตัวอย่างเช่นinit.js) node.exe init.jsจากนั้นก็วิ่ง มันจะตั้งค่าสีและเรียกใช้พรอมต์คำสั่ง node.js

(ขอบคุณ loganfsmyth ในคำตอบนี้สำหรับแนวคิดการทำซ้ำ)


19

ห้องสมุดโดย Sindre Sorhus นี้ดีที่สุดในขณะนี้:

ชอล์ก

  • มีสมรรถนะสูง
  • ไม่ขยาย String.prototype
  • API ที่แสดงออก
  • ความสามารถในการรังสไตล์
  • สะอาดและมุ่งเน้น
  • ตรวจจับการสนับสนุนสีโดยอัตโนมัติ
  • บำรุงรักษาอย่างแข็งขัน
  • ใช้โดยโมดูล 5500+ ตัว

2
ใช่ แต่มันเป็นอีกพึ่งพา
wayofthefuture

18

รหัสสีดังกล่าว

Reset: "\x1b[0m"
Bright: "\x1b[1m"
Dim: "\x1b[2m"
Underscore: "\x1b[4m"
Blink: "\x1b[5m"
Reverse: "\x1b[7m"
Hidden: "\x1b[8m"

FgBlack: "\x1b[30m"
FgRed: "\x1b[31m"
FgGreen: "\x1b[32m"
FgYellow: "\x1b[33m"
FgBlue: "\x1b[34m"
FgMagenta: "\x1b[35m"
FgCyan: "\x1b[36m"
FgWhite: "\x1b[37m"

BgBlack: "\x1b[40m"
BgRed: "\x1b[41m"
BgGreen: "\x1b[42m"
BgYellow: "\x1b[43m"
BgBlue: "\x1b[44m"
BgMagenta: "\x1b[45m"
BgCyan: "\x1b[46m"
BgWhite: "\x1b[47m"

ตัวอย่างเช่นถ้าคุณต้องการมี Dim, Red text ด้วย Blue background คุณสามารถทำได้ใน Javascript ดังนี้:

console.log("\x1b[2m", "\x1b[31m", "\x1b[44m", "Sample Text", "\x1b[0m");

ลำดับของสีและเอฟเฟกต์ดูเหมือนจะไม่สำคัญ แต่จำไว้เสมอว่าต้องรีเซ็ตสีและเอฟเฟกต์ในตอนท้าย


@ Sergey กะพริบยังไม่ทำงานสำหรับฉันดูเหมือนว่ามันจะไม่สามารถใช้ได้ใน Node
Sv443

@ Sv443 แต่มันใช้งานได้บนสกรีนช็อต :) และคำถามก็เกี่ยวกับโหนด ฉันคิดว่ามันใช้งานไม่ได้ในคอนโซล Windows เท่านั้น ระบบปฏิบัติการใดที่คุณใช้
Sergey

2
@ Sergey ฉันกำลังใช้ Windows และพยายามใน CMD และ Powershell และทั้งสองใช้งานไม่ได้
Sv443

@Sergey ภาพหน้าจอของฉันมาจากแอปพลิเคชั่นเครื่อง MacOS ฉันเชื่อว่านี่เป็นสิ่งที่เชลล์แอปพลิเคชันของคุณควรสนับสนุน หากคุณใช้ windows ฉันขอแนะนำให้ลองติดตั้ง Cygwin และลองทำสิ่งนี้ด้วยการทุบตี ฉันอยากรู้เกี่ยวกับเรื่องนี้ด้วย
Shnd

@ ฉันไม่แน่ใจว่ามันเหมือนกันหรือไม่ แต่ฉันลองใช้ git-bash และมันก็ไม่ได้ผลเหมือนกัน
Sergey

14

หนึ่งซับที่มีประโยชน์ฉันเขียนสำหรับสคริปต์ npm ที่ไม่สามารถอ้างอิงได้:

const { r, g, b, w, c, m, y, k } = [
  ['r', 1], ['g', 2], ['b', 4], ['w', 7],
  ['c', 6], ['m', 5], ['y', 3], ['k', 0],
].reduce((cols, col) => ({
  ...cols,  [col[0]]: f => `\x1b[3${col[1]}m${f}\x1b[0m`
}), {})

console.log(`${g('I')} love ${r('Italy')}`)

แก้ไข: r,g,b,w,c,m,y,kหมายถึงสีแดง, สีเขียว, สีฟ้า, สีขาว, สีฟ้า, สีม่วงแดง, สีเหลืองและสีดำ (k)


ดูเหมือนว่ามีประโยชน์ แต่คุณช่วยอธิบายเพิ่มเติมหน่อยได้ไหม? โหมดนักสืบเปิด: ah ok, rgbwc ... หมายถึงสีแดง, เขียว, น้ำเงิน, ขาว, ฟ้า, ม่วงแดง, เหลืองและ k?
538ROMEO

10

สำหรับทางเลือกที่นิยมสีที่ไม่ได้ยุ่งกับตัวในวิธีการของวัตถุ String ผมขอแนะนำให้ตรวจสอบจากCLI สี

รวมถึงทั้งสีและสไตล์ลูกโซ่เช่นตัวหนาตัวเอียงและขีดเส้นใต้

สำหรับการเปรียบเทียบของโมดูลต่าง ๆ ในหมวดหมู่นี้ดูที่นี่


10

ไม่มีห้องสมุดไม่มีความยุ่งยากง่าย ๆ เพียง:

console.log(red('Error!'));

function red(s) {
    return '\033[31m' + s;
}

1
มันไม่ง่ายเมื่อคุณพบว่ามันไม่ทำงานกับวัตถุที่ทางคอนโซลจัดการกับมันและมันก็ไม่เคารพประเภทสตรีมคอนโซลหรือการสนับสนุน TTY ซึ่งสร้างปัญหาเพิ่มเติม มันเป็นแค่การแฮ็คที่จะทำให้เกิดปัญหามากมาย
vitaly-t

นั่นคือสิ่งที่ JSON.stringify มีไว้สำหรับ
wayofthefuture

10

อิโมจิ

คุณสามารถใช้สีสำหรับข้อความตามที่คนอื่นพูดถึงในคำตอบของพวกเขา

แต่คุณสามารถใช้อีโมจิแทนได้! ตัวอย่างเช่นคุณสามารถใช้คุณสามารถใช้⚠️สำหรับข้อความเตือนและ🛑ข้อความผิดพลาด

หรือเพียงใช้สมุดบันทึกเหล่านี้เป็นสี:

📕: error message
📙: warning message
📗: ok status message
📘: action message
📓: canceled status message
📔: Or anything you like and want to recognize immediately by color

โบนัส:

วิธีนี้ยังช่วยให้คุณสามารถสแกนได้อย่างรวดเร็วและหาบันทึกโดยตรงในรหัสที่มา

แต่ฟอนต์อีโมจิเริ่มต้นของ linux นั้นไม่ได้มีสีสันตามค่าเริ่มต้นและคุณอาจต้องการทำให้มันมีสีสันก่อน


6

มีสองวิธีในการดูการเปลี่ยนสีสำหรับคอนโซล Node.js วันนี้

console.logหนึ่งคือผ่านห้องสมุดวัตถุประสงค์ทั่วไปที่สามารถตกแต่งสตริงข้อความที่มีแท็กสีซึ่งคุณออกผ่านมาตรฐาน

ห้องสมุดชั้นนำสำหรับวันนี้:

และวิธีอื่น ๆ - การแก้ไขวิธีคอนโซลที่มีอยู่ หนึ่งในห้องสมุดดังกล่าว - Manakinช่วยให้คุณสามารถตั้งค่าสีมาตรฐานสำหรับทุกวิธีคอนโซลของคุณโดยอัตโนมัติ ( log, warn, errorและinfo)

ความแตกต่างที่สำคัญอย่างหนึ่งจากไลบรารี่สีทั่วไป - มันสามารถตั้งค่าสีได้ทั้งแบบโกลบอลหรือแบบโลคอลในขณะที่ยังคงรูปแบบไวยากรณ์และรูปแบบเอาท์พุทที่สอดคล้องกันสำหรับทุกวิธีการของ Node.js ซึ่งคุณใช้โดยไม่ต้อง .

ฉันต้องเปลี่ยนสีพื้นหลังคอนโซลเป็นสีขาวเนื่องจากปัญหาสายตา แต่ตัวอักษรเป็นสีเทาและทำให้ข้อความอ่านไม่ได้ ฉันจะเปลี่ยนได้อย่างไร

สำหรับปัญหาของคุณโดยเฉพาะนี่เป็นวิธีที่ง่ายที่สุด:

var con = require('manakin').global;
con.log.color = 30; // Use black color for console.log

มันจะตั้งค่าสีดำสำหรับการconsole.logโทรทุกครั้งในแอปพลิเคชันของคุณ ดูรหัสสีมากขึ้น

สีเริ่มต้นที่ใช้โดยmanakin :

ป้อนคำอธิบายรูปภาพที่นี่


6

ฉันโอเวอร์โหลดวิธีคอนโซลมากเกินไป

var colors={
Reset: "\x1b[0m",
Red: "\x1b[31m",
Green: "\x1b[32m",
Yellow: "\x1b[33m"
};

var infoLog = console.info;
var logLog = console.log;
var errorLog = console.error;
var warnLog = console.warn;

console.info= function(args)
{
    var copyArgs = Array.prototype.slice.call(arguments);
    copyArgs.unshift(colors.Green);
    copyArgs.push(colors.Reset);
    infoLog.apply(null,copyArgs);
};

console.warn= function(args)
{
    var copyArgs = Array.prototype.slice.call(arguments);
    copyArgs.unshift(colors.Yellow);
    copyArgs.push(colors.Reset);
    warnLog.apply(null,copyArgs);
};
console.error= function(args)
{
    var copyArgs = Array.prototype.slice.call(arguments);
    copyArgs.unshift(colors.Red);
    copyArgs.push(colors.Reset);
    errorLog.apply(null,copyArgs);
};

// examples
console.info("Numeros",1,2,3);
console.warn("pares",2,4,6);
console.error("reiniciandooo");

ผลลัพธ์คือ

ป้อนคำอธิบายรูปภาพที่นี่


สิ่งนี้ใช้ไม่ได้กับไวยากรณ์การจัดรูปแบบ ตัวอย่าง: console.info('Hello %s', 'World!')ควรจะแสดงผลและไม่Hello World! Hello %s World!
vitaly-t

@ vitaly-t ลองนี้ : มันควรจะทำงาน
Sergey

5

มาข้ามคำถามนี้และต้องการใช้สีบางอย่างใน stdout โดยไม่มีการอ้างอิงใด ๆ นี่เป็นการรวมคำตอบที่ยอดเยี่ยมอื่น ๆ เข้าด้วยกันที่นี่

นี่คือสิ่งที่ฉันมี (ต้องการโหนด v4 หรือสูงกว่า)

// colors.js
const util = require('util')

function colorize (color, text) {
  const codes = util.inspect.colors[color]
  return `\x1b[${codes[0]}m${text}\x1b[${codes[1]}m`
}

function colors () {
  let returnValue = {}
  Object.keys(util.inspect.colors).forEach((color) => {
    returnValue[color] = (text) => colorize(color, text)
  })
  return returnValue
}

module.exports = colors()

เพียงแค่ต้องใช้ไฟล์จากนั้นใช้มันเพื่อ:

const colors = require('./colors')
console.log(colors.green("I'm green!"))

รหัสสีที่กำหนดไว้ล่วงหน้ามีให้ที่นี่


1
จะไม่ทำงานอย่างถูกต้องเมื่อเปลี่ยนเส้นทางไปยังไฟล์บันทึกตัวอย่างเช่น
vitaly-t

4

สีคอนโซล

บันทึก colorable ง่าย สนับสนุนการตรวจสอบวัตถุและการอัพเดตบรรทัดเดียวแพคเกจนี้เพิ่งทาสีคอนโซล

ติดตั้ง

npm install paint-console

การใช้

require('paint-console');

console.info('console.info();');
console.warn('console.warn();');
console.error('console.error();');
console.log('console.log();');

การสาธิต


4

ฉันไม่ต้องการการพึ่งพาใด ๆ สำหรับสิ่งนี้และสิ่งเหล่านี้ใช้ได้กับฉันใน OS X เท่านั้นตัวอย่างอื่น ๆ จากคำตอบที่นี่ทำให้ฉันมีOctal literalข้อผิดพลาด

Reset = "\x1b[0m"
Bright = "\x1b[1m"
Dim = "\x1b[2m"
Underscore = "\x1b[4m"
Blink = "\x1b[5m"
Reverse = "\x1b[7m"
Hidden = "\x1b[8m"

FgBlack = "\x1b[30m"
FgRed = "\x1b[31m"
FgGreen = "\x1b[32m"
FgYellow = "\x1b[33m"
FgBlue = "\x1b[34m"
FgMagenta = "\x1b[35m"
FgCyan = "\x1b[36m"
FgWhite = "\x1b[37m"

BgBlack = "\x1b[40m"
BgRed = "\x1b[41m"
BgGreen = "\x1b[42m"
BgYellow = "\x1b[43m"
BgBlue = "\x1b[44m"
BgMagenta = "\x1b[45m"
BgCyan = "\x1b[46m"
BgWhite = "\x1b[47m"

แหล่งที่มา: https://coderwall.com/p/yphywg/printing-colorful-text-in-terminal-when-run-node-js-script


4

ฉันพบคำตอบนี้ด้านบน ( https://stackoverflow.com/a/41407246/4808079 ) มีประโยชน์มาก แต่ไม่สมบูรณ์ หากคุณต้องการสีอะไรซักครั้งฉันคิดว่ามันใช้ได้ แต่ฉันคิดว่าการแบ่งปันมันในรูปแบบการใช้งานที่สามารถรันได้นั้นสามารถนำไปใช้กับกรณีการใช้ชีวิตจริงได้มากขึ้น

const Color = {
  Reset: "\x1b[0m",
  Bright: "\x1b[1m",
  Dim: "\x1b[2m",
  Underscore: "\x1b[4m",
  Blink: "\x1b[5m",
  Reverse: "\x1b[7m",
  Hidden: "\x1b[8m",

  FgBlack: "\x1b[30m",
  FgRed: "\x1b[31m",
  FgGreen: "\x1b[32m",
  FgYellow: "\x1b[33m",
  FgBlue: "\x1b[34m",
  FgMagenta: "\x1b[35m",
  FgCyan: "\x1b[36m",
  FgWhite: "\x1b[37m",

  BgBlack: "\x1b[40m",
  BgRed: "\x1b[41m",
  BgGreen: "\x1b[42m",
  BgYellow: "\x1b[43m",
  BgBlue: "\x1b[44m",
  BgMagenta: "\x1b[45m",
  BgCyan: "\x1b[46m",
  BgWhite: "\x1b[47m"
}

function colorString(color, string) {
  return `${color}${string}${Color.Reset}`;
}

function colorStringLog(color, string) {
  console.log(colorString(color, string));
}

ใช้มันแบบนี้:

colorStringLog(Color.FgYellow, "Some Yellow text to console log");

console.log([
  colorString(Color.FgRed, "red"),
  colorString(Color.FgGreen, "green"),
  colorString(Color.FgBlue, "blue"),
].join(", "));

4

คนตัดไม้ / index.js

const colors = {
    Reset : "\x1b[0m",
    Bright : "\x1b[1m",
    Dim : "\x1b[2m",
    Underscore : "\x1b[4m",
    Blink : "\x1b[5m",
    Reverse : "\x1b[7m",
    Hidden : "\x1b[8m",

    FgBlack : "\x1b[30m",
    FgRed : "\x1b[31m",
    FgGreen : "\x1b[32m",
    FgYellow : "\x1b[33m",
    FgBlue : "\x1b[34m",
    FgMagenta : "\x1b[35m",
    FgCyan : "\x1b[36m",
    FgWhite : "\x1b[37m",

    BgBlack : "\x1b[40m",
    BgRed : "\x1b[41m",
    BgGreen : "\x1b[42m",
    BgYellow : "\x1b[43m",
    BgBlue : "\x1b[44m",
    BgMagenta : "\x1b[45m",
    BgCyan : "\x1b[46m",
    BgWhite : "\x1b[47m",
};

module.exports = () => {
    Object.keys(colors).forEach(key => {
        console['log' + key] = (strg) => {
            if(typeof strg === 'object') strg = JSON.stringify(strg, null, 4);
            return console.log(colors[key]+strg+'\x1b[0m');
        }
    });
}

app.js

require('./logger')();

จากนั้นใช้มันเหมือน:

console.logBgGreen(" grüner Hintergrund ")

4

สิ่งนี้ขึ้นอยู่กับแพลตฟอร์มที่คุณใช้ วิธีที่พบได้บ่อยที่สุดคือการพิมพ์ ANSI escape sequences ตัวอย่างง่ายๆนี่คือรหัสหลามจากสคริปต์ blender build:

// This is a object for use ANSI escape to color the text in the terminal
const bColors = {
    HEADER    : '\033[95m',
    OKBLUE    : '\033[94m',
    OKGREEN   : '\033[92m',
    WARNING   : '\033[93m',
    FAIL      : '\033[91m',
    ENDC      : '\033[0m', 
    BOLD      : '\033[1m',   
    UNDERLINE : '\033[4m'
}

ในการใช้รหัสเช่นนี้คุณสามารถทำสิ่งต่างๆได้

console.log(`${bColors.WARNING} My name is sami ${bColors.ENDC}`)

ฉันได้รับ "ลำดับการหลบหลีกของ Octal ไม่ได้รับอนุญาตในโหมดเข้มงวด"
lucaswxp

3
var colorSet = {
    Reset: "\x1b[0m",
    Red: "\x1b[31m",
    Green: "\x1b[32m",
    Yellow: "\x1b[33m",
    Blue: "\x1b[34m",
    Magenta: "\x1b[35m"
};

var funcNames = ["info", "log", "warn", "error"];
var colors = [colorSet.Green, colorSet.Blue, colorSet.Yellow, colorSet.Red];

for (var i = 0; i < funcNames.length; i++) {
    let funcName = funcNames[i];
    let color = colors[i];
    let oldFunc = console[funcName];
    console[funcName] = function () {
        var args = Array.prototype.slice.call(arguments);
        if (args.length) {
            args = [color + args[0]].concat(args.slice(1), colorSet.Reset);
        }
        oldFunc.apply(null, args);
    };
}

// Test:
console.info("Info is green.");
console.log("Log is blue.");
console.warn("Warn is orange.");
console.error("Error is red.");
console.info("--------------------");
console.info("Formatting works as well. The number = %d", 123);

3

นอกจากนี้คุณยังสามารถใช้Colorworks

การใช้งาน:

var cw = require('colorworks').create();
console.info(cw.compile('[[red|Red message with a [[yellow|yellow]] word.]]'));

เพื่อให้ชีวิตง่ายขึ้นคุณสามารถสร้างฟังก์ชั่นได้ด้วย

function say(msg) {
  console.info(cw.compile(msg));
}

ตอนนี้คุณสามารถทำได้:

say(`[[yellow|Time spent: [[green|${time}]]ms.]]`);

2

Coolors

มันค่อนข้างดีสำหรับการใช้งานหรือขยาย คุณสามารถใช้ง่าย:

var coolors = require('coolors');
console.log(coolors('My cool console log', 'red'));

หรือด้วย config:

var coolors = require('coolors');
console.log(coolors('My cool console log', {
   text: 'yellow',
   background: 'red',
   bold: true,
   underline: true,
   inverse: true,
   strikethrough: true
}));

และดูเหมือนตลกจริงๆที่จะขยาย:

var coolors = require('coolors');
function rainbowLog(msg){
    var colorsText = coolors.availableStyles().text;
    var rainbowColors = colorsText.splice(3);
    var lengthRainbowColors = rainbowColors.length;
    var msgInLetters = msg.split('');
    var rainbowEndText = '';
    var i = 0;
    msgInLetters.forEach(function(letter){
        if(letter != ' '){
            if(i === lengthRainbowColors) i = 0;
            rainbowEndText += coolors(letter, rainbowColors[i]);
            i++;
        }else{
            rainbowEndText += ' ';
        }
    });
    return rainbowEndText;
}
coolors.addPlugin('rainbow', rainbowLog);
console.log(coolorsExtended('This its a creative example extending core with a cool rainbown style', 'rainbown'));

ดูโมดูลตัวระบายความร้อน


สิ่งนี้จะไม่ทำงานใน Node.js อย่างถูกต้องเมื่อเปลี่ยนเส้นทางไปยังล็อกไฟล์ตัวอย่างเช่น
vitaly-t

2

ฉันสร้างโมดูลของตัวเองStyleMe ฉันทำมันเพื่อให้ฉันสามารถทำอะไรได้มากด้วยการพิมพ์เพียงเล็กน้อย ตัวอย่าง:

var StyleMe = require('styleme');
StyleMe.extend() // extend the string prototype

console.log("gre{Hello} blu{world}!".styleMe()) // Logs hello world! with 'hello' being green, and 'world' being blue with '!' being normal.

สามารถซ้อนกันได้:

console.log("This is normal red{this is red blu{this is blue} back to red}".styleMe())

หรือถ้าคุณไม่ต้องการที่จะขยายตัวต้นแบบสตริงคุณสามารถเลือกหนึ่งในสามตัวเลือกอื่น ๆ :

console.log(styleme.red("a string"))
console.log("Hello, this is yellow text".yellow().end())
console.log(styleme.style("some text","red,bbl"))

1

ใน Ubuntu คุณสามารถใช้รหัสสี:

var sys = require('sys');
process.stdout.write("x1B[31m" + your_message_in_red + "\x1B[0m\r\n");

ทำไมคนไม่ได้ใช้require?
jhpratt GOFUNDME RELICENSING

เมื่อสองสามปีก่อน มันเป็นสิ่งจำเป็นสำหรับการเขียน stdout บางทีตอนนี้มันจะถูกนำเข้าแล้วโดยค่าเริ่มต้น
Kenjy Minamori

อาโอเค. ฉันแค่อยากรู้อยากเห็นเพราะมันไม่เหมือนsysถูกใช้ที่ใดก็ได้ ในความเป็นจริงมันไม่จำเป็นในปัจจุบันแม้ว่า!
jhpratt GOFUNDME RELICENSING

1

โหนด colorify

มีฟังก์ชั่นสำหรับพิมพ์ข้อความสีและการจัดรูปแบบข้อความเช่นตัวหนา, กะพริบ, ฯลฯ


3
ในขณะที่ลิงค์ที่คุณให้อาจตอบคำถาม ทางที่ดีที่สุดคือให้ใส่ส่วนสำคัญของโซลูชันของคุณลงในคำตอบของคุณโดยตรงในกรณีที่หน้าของลิงก์หมดอายุในอนาคต
Kmeixner

1

ฉันชอบคำตอบของ @ Daniel จริง ๆ แต่ฟังก์ชั่น console.log {color} ไม่ทำงานเหมือนกับ console.log ปกติ ฉันได้ทำการเปลี่ยนแปลงเล็กน้อยและตอนนี้พารามิเตอร์ทั้งหมดของฟังก์ชั่นใหม่จะถูกส่งผ่านไปยัง console.log (เช่นเดียวกับรหัสสี)

const _colors = {
    Reset : "\x1b[0m",
    Bright : "\x1b[1m",
    Dim : "\x1b[2m",
    Underscore : "\x1b[4m",
    Blink : "\x1b[5m",
    Reverse : "\x1b[7m",
    Hidden : "\x1b[8m",

    FgBlack : "\x1b[30m",
    FgRed : "\x1b[31m",
    FgGreen : "\x1b[32m",
    FgYellow : "\x1b[33m",
    FgBlue : "\x1b[34m",
    FgMagenta : "\x1b[35m",
    FgCyan : "\x1b[36m",
    FgWhite : "\x1b[37m",

    BgBlack : "\x1b[40m",
    BgRed : "\x1b[41m",
    BgGreen : "\x1b[42m",
    BgYellow : "\x1b[43m",
    BgBlue : "\x1b[44m",
    BgMagenta : "\x1b[45m",
    BgCyan : "\x1b[46m",
    BgWhite : "\x1b[47m",
};

const enableColorLogging = function(){
    Object.keys(_colors).forEach(key => {
        console['log' + key] = function(){
            return console.log(_colors[key], ...arguments, _colors.Reset);
        }
    });
}

1

2017:

วิธีง่ายๆเพิ่มสีเวลาให้กับข้อความคุณไม่จำเป็นต้องเปลี่ยนรหัสของคุณใช้ console.log ('msg') หรือ console.err ('ข้อผิดพลาด') ของคุณ

var clc = require("cli-color");
var mapping = {
  log: clc.blue,
  warn: clc.yellow,
  error: clc.red
};

["log", "warn", "error"].forEach(function(method) {
  var oldMethod = console[method].bind(console);
  console[method] = function() {
    oldMethod.apply(
      console,
      [mapping[method](new Date().toISOString())]
      .concat(arguments)
    );
  };
});

ป้อนคำอธิบายรูปภาพที่นี่


0

หากคุณใช้ Windows CMD ให้ไปที่ Terminal Properties / Colors (CMD ด้านบนซ้าย) จากนั้นกำหนดค่า RGB ของสีที่ไม่เหมาะสมอีกครั้ง ในกรณีของฉันฉันเชื่อว่ามันเป็นสี่เหลี่ยมจัตุรัสสีที่ห้าจากด้านซ้ายซึ่งฉันเปลี่ยนเป็น (222,222,222) ไม่สำคัญว่าปุ่มตัวเลือกที่เลือกไว้ในปัจจุบันจะแสดงข้อความหน้าจอหรือพื้นหลังหน้าจอในขณะที่คุณเพิ่งกำหนดสี "ระบบ" เฉพาะนั้นใหม่ เมื่อคุณเปลี่ยนสีอย่าลืมเลือกสีพื้นหลังหรือข้อความที่ต้องการก่อนคลิกตกลง

หลังจากการเปลี่ยนแปลงข้อความสีแดงทั้งหมดจากโหนด (Ember ในกรณีของฉัน) จะมองเห็นได้ชัดเจน


0

นี่เป็นวิธีการสำหรับ Windows 10 (อาจจะเป็น 7) และจะเปลี่ยนรูปแบบสี (ชุดรูปแบบ) สำหรับ cmd, เทอร์มินัล npm เองไม่เพียง แต่เอาต์พุตคอนโซลสำหรับแอปเฉพาะ

ฉันพบปลั๊กอิน Windows ที่ใช้งานได้ - เครื่องมือสีซึ่งน่าจะพัฒนาภายใต้ร่มของ Windows รายละเอียดสามารถดูได้ที่ลิงค์

ฉันเพิ่มไดเรกทอรี colortool ลงในตัวแปรพา ธ ของสภาพแวดล้อมระบบและตอนนี้มันสามารถใช้ได้ทุกครั้งที่ฉันเริ่มต้นเทอร์มินัล (พรอมต์คำสั่ง NodeJs, cmd)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.