Làm cách nào để thay đổi màu phông chữ bảng điều khiển của node.js?


570

Tôi đã phải thay đổi màu nền của giao diện điều khiển thành màu trắng vì các vấn đề về mắt, nhưng phông chữ có màu xám và nó làm cho các thông điệp không thể đọc được. Làm thế nào tôi có thể thay đổi nó?


4
Ở cùng một nơi bạn đã sử dụng để thay đổi màu nền, bạn có thể thay đổi các màu khác.
Dan D.

@hippietrail các bạn đã tìm thấy một giải pháp tốt hơn hay bạn có thể chấp nhận một trong những câu trả lời cho câu hỏi này không?
nelsonic

Làm thế nào để bạn làm điều này trong Node.js thuần túy? Không có màu sắc hoặc bất kỳ gói khác.
Costa

1
Im có cùng một vấn đề. Tôi nghi ngờ @Viclib đang sử dụng windows (như tôi), đó là lý do tại sao các hướng dẫn thay đổi màu thiết bị đầu cuối là một khái niệm xa lạ. Dấu nhắc lệnh windows cho phép thay đổi 2 màu nền trước và 2 màu nền. Nút sử dụng các màu khác mà dấu nhắc lệnh windows không thể xác định.
Greg Woods

2
Sau đó tôi phát hiện ra rằng mô hình tinh thần của tôi về cách các màu nhắc lệnh của Windows hoạt động, là hoàn toàn sai. Tôi đã giả định không chính xác (do một giao diện người dùng khủng khiếp) rằng bạn chỉ có thể thay đổi màu nền trước, màu nền. Cái này sai. Tất cả 16 màu có thể được sử dụng bởi ứng dụng bảng điều khiển và điều quan trọng là chọn màu hợp lý cho tất cả 16 màu và LUÔN LUÔN sử dụng ô màu 1 làm nền (và ô 9 cho "nền bật lên"). Đây là một sự mặc khải đối với tôi, tôi đã viết một bài đăng trên blog (một sự kiện hiếm có thực sự). gregwoods.co.uk/2015/04/ từ
Greg Woods

Câu trả lời:


1151

Dưới đây bạn có thể tìm thấy màu tham chiếu của văn bản để ra lệnh khi chạy ứng dụng node.js:

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

Lưu ý %slà nơi trong chuỗi (đối số thứ hai) được chèn. \x1b[0mĐặt lại màu của thiết bị đầu cuối để nó không tiếp tục là màu được chọn nữa sau thời điểm này.

Màu sắc tham khảo

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"

BIÊN TẬP:

Ví dụ, \x1b[31mlà một chuỗi thoát sẽ bị chặn bởi thiết bị đầu cuối của bạn và hướng dẫn nó chuyển sang màu đỏ. Trong thực tế, \x1blà mã cho ký tự điều khiển không in được escape . Các chuỗi thoát chỉ liên quan đến màu sắc và kiểu dáng còn được gọi là mã thoát ANSI và được chuẩn hóa, do đó chúng (nên) hoạt động trên mọi nền tảng.

Wikipedia có một so sánh tuyệt vời về cách các thiết bị đầu cuối khác nhau hiển thị màu sắc https://en.wikipedia.org/wiki/ANSI_escape_code#Colors


42
Tôi đã chấp nhận câu hỏi này vì đây là câu hỏi lười nhất, có nhiều màu sắc và không phụ thuộc. Nếu bạn muốn giải pháp đơn giản hơn với các phụ thuộc, hãy kiểm tra câu trả lời của @ nelsonic trong đó gợi ý các lib rất đơn giản.
MaiaVictor

7
Bạn đã tìm thấy tài liệu tham khảo này ở đâu? Mỗi ký tự trong một giá trị màu có nghĩa là gì?
giorgos.nl

10
@ giorgos29cm → xem tại đây . Btw, thêm một 1;màu sáng, tức là "\ x1b [1; 34m" == màu xanh nhạt ...
Frank Nocke

2
Làm cách nào để ngăn các ký tự này hiển thị khi in thành tệp chứ không phải bảng điều khiển?
Bầu trời

1
Thật kỳ lạ, trên Windows 10, màu vàng sẽ chuyển sang màu trắng? Màu vàng có thể được thực hiện để làm việc; phấn nào làm được. Tuy nhiên, câu trả lời này đã cứu tôi khỏi việc thêm phấn như một sự phụ thuộc cho một vài nhật ký bệnh sởi, cảm ơn!
webelo

318

Có nhiều gói có sẵn để định dạng văn bản bảng điều khiển trong Node.js. Phổ biến nhất là:

Sử dụng:


PHẤN:

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

CLI-MÀU:

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

MÀU SẮC:

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

Nhiều người đã ghi nhận sự từ chối của họ về colorsviệc thay đổi nguyên mẫu String . Nếu bạn muốn các nguyên mẫu của mình được để yên, hãy sử dụng mã sau đây:

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

1
Nó thậm chí có hỗ trợ nhẹ đơn giản cho phong cách!
hà mã

2
@devundef đồng ý với bạn về việc thêm các phương thức vào đối tượng String. Có thể đáng nói đến điều đó với tác giả mô-đun trên GitHub. Và / Hoặc đề xuất một mô-đun / phương pháp thay thế với mức độ đơn giản tương tự.
nelsonic

3
Mặc dù tôi đồng ý rằng câu trả lời của MattJohnson (ghi đè màu mặc định của phương thức produc.inpect - xem bên dưới) tốt hơn so với sử dụng mô-đun Colors, mô-đun Colors yêu cầu thiết lập bằng 0 và phù hợp với nhu cầu của đại đa số người dùng chỉ đơn giản là thay đổi màu của bảng điều khiển .log đầu ra. Chắc chắn, "gây rối với tích hợp" là xấu (đồng ý 100%) nhưng không có mã được triển khai nào nên chứa các câu lệnh console.log, vì vậy hãy thực tế về điều này. @devundef Các phương thức Chuỗi bổ sung có được thêm vào mớ hỗn độn nguyên mẫu với các bài kiểm tra đơn vị của bạn không?
nelsonic

8
Màu sắc có ngay bây giờ: var colors = require('colors/safe');và sau đó sử dụngcolors.red('left string all alone')
Laoujin

1
Phát hiện tốt @Laoujin - lần sau hãy đề nghị chỉnh sửa. Tôi đã sửa đổi ví dụ mã cho Màu sắc trong câu trả lời.
nelsonic

155

Nếu bạn muốn tự thay đổi màu sắc mà không cần mô-đun hãy thử

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

Đầu tiên \x1b[36mđể thay đổi màu sắc 36và sau đó trở lại màu thiết bị đầu cuối 0.

Dưới đây là danh sách mã màu ANSI


15
Cảm ơn đã đề cập làm thế nào để thiết lập lại màu sắc.
Vasyl Boroviak

25
Dưới đây là các mã thiết bị đầu cuối ANSI, telepathy.freedesktop.org/doc/telepathy-glib/ mẹo
Ăn tại Joes

1
Còn việc thay đổi kiểu chữ, như màu đỏ đậm, màu xanh lá cây thì sao?
uzay95

1
Hoạt động hoàn hảo, không gây rối với mã thoát bát phân bị ngăn chặn trong chế độ nghiêm ngặt.
Florrie

70

để tô màu đầu ra của bạn Bạn có thể sử dụng các ví dụ từ đó:
https://help.ubfox.com/community/CustomizingBashPrompt

Vừa là Gist cho nodeJs

Ví dụ: nếu bạn muốn một phần của văn bản có màu đỏ, chỉ cần thực hiện console.log với:

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

Dựa vào đó tôi đã tạo tiện ích mở rộng "colog" cho Node.js. Bạn có thể cài đặt nó bằng cách sử dụng:

npm install colog

Repo và npm: https://github.com/dariuszp/colog


1
Tôi tin rằng OP không muốn in văn bản cụ thể bằng một màu cụ thể nhưng tất cả đầu ra Terminal sẽ có màu khác theo mặc định, thậm chí có thể có màu đen với nền trắng.
cwoebker

Sau đó, anh ta nên thay đổi cài đặt của thiết bị đầu cuối của mình. Tôi chắc chắn rằng nó có thể trên Linux. Không có ý tưởng về Windows.
Dariuszp

14
\033[31mhoạt động nhưng \033[91mkhông. Đối với Ubuntu Terminal thì phải như vậy \033[0m.
Redsandro

4
Và bát phân thoát không xuất hiện để làm việc:error: octal escape sequences "\033[31mServer ready @ #{app.get('port')}\033[91m" are not allowed
jcollum

4
\033[0mnên được sử dụng để biến văn bản trở lại bình thường, không\033[91m
mollerhoj

31

Đây là danh sách các màu có sẵn (nền, tiền cảnh) trong bảng điều khiển với các hành động khả dụng (đặt lại, đảo ngược, ...).

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"
 }
};

Sử dụng nó như sau:

 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

Bạn cũng có thể cài đặt:

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

CNTT sẽ cung cấp cho bạn một đầu ra gần hơn với bảng điều khiển của phía khách hàng:

nhập mô tả hình ảnh ở đây


1
Tôi đang sử dụng tương tự và hoạt động tốt nhưng vì lý do nào đó Dim không làm gì cả? Tôi muốn hiệu ứng màu xám để nghĩ rằng sử dụng màu trắng với hiệu ứng mờ sẽ dẫn đến màu xám nhưng chỉ in màu trắng không mờ. Bất kỳ ý tưởng?
Angad

28

Mỗi tài liệu này , bạn có thể thay đổi màu sắc dựa trên kiểu dữ liệu đầu ra:

// 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 ] }

Các mã này dường như là mã thoát ANR SGR, trong đó số đầu tiên là mã phát ra trước đầu ra và số thứ hai là mã để phát ra sau. Vì vậy, nếu chúng ta nhìn vào biểu đồ mã ANR SGR trên Wikipedia , bạn sẽ thấy hầu hết các mã này bắt đầu bằng số 30-37 để đặt màu nền trước và kết thúc bằng 39 để đặt lại thành màu nền trước mặc định.

Vì vậy, một điều tôi không thích là một số trong số này tối như thế nào. Đặc biệt là ngày. Đi trước và thử new Date()trong giao diện điều khiển. Màu đỏ tươi trên màu đen thực sự rất khó đọc. Thay vào đó, hãy thay đổi nó thành một màu đỏ tươi.

// 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';

Bây giờ khi bạn cố gắng new Date() , đầu ra dễ đọc hơn nhiều.

Nếu bạn muốn tự động đặt màu khi khởi chạy nút, hãy tạo tập lệnh khởi chạy thay thế, như thế này:

// 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({});

Lưu tệp này (ví dụ init.js:), sau đó chạynode.exe init.js . Nó sẽ thiết lập màu sắc và khởi chạy dấu nhắc lệnh node.js.

(Cảm ơn loganfsmyth trong câu trả lời này cho ý tưởng thay thế.)


19

Thư viện này của Sindre Sorhus là tốt nhất tại thời điểm này:

phấn

  • Hiệu suất cao
  • Không mở rộng String.prototype
  • API biểu cảm
  • Khả năng làm tổ
  • Sạch sẽ và tập trung
  • Tự động phát hiện hỗ trợ màu
  • Tích cực duy trì
  • Được sử dụng bởi hơn 5500 mô-đun

2
vâng, nhưng một sự phụ thuộc khác của nó
wayofthefuture

18

Mã màu như đã đề cập

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"

Ví dụ: nếu bạn muốn có văn bản Dim, Red với nền Blue, bạn có thể thực hiện điều đó trong Javascript như thế này:

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

Thứ tự của màu sắc và hiệu ứng dường như không quan trọng lắm nhưng luôn nhớ đặt lại màu sắc và hiệu ứng ở cuối.


@Sergey nháy mắt cũng không hoạt động đối với tôi, có vẻ như nó không khả dụng trong Node
Sv443

@ Sv443 Nhưng nó hoạt động trên ảnh chụp màn hình :) Và câu hỏi là về Node. Tôi nghĩ rằng nó không hoạt động chỉ trong giao diện điều khiển Windows. Bạn sử dụng hệ điều hành nào?
Serge

2
@Sergey Tôi đang sử dụng Windows và đã thử trong CMD và Powershell và cả hai đều không hoạt động
Sv443

@Sergey Ảnh chụp màn hình của tôi là từ ứng dụng MacOS terminal. Tôi tin rằng đây là điều mà ứng dụng shell của bạn nên hỗ trợ. Nếu bạn đang sử dụng windows, tôi khuyên bạn nên thử cài đặt Cygwin và thử điều này trên bash. Tôi tò mò muốn biết về điều này quá.
Shnd 8/12/18

@ Tôi không chắc liệu nó có giống nhau không, nhưng tôi đã thử nó trên git-bash và nó cũng không hoạt động.
Sergey

14

Một phần mềm tiện dụng tôi đã viết cho các tập lệnh npm không thể có phụ thuộc:

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')}`)

Chỉnh sửa: r,g,b,w,c,m,y,k là viết tắt của màu đỏ, xanh lá cây, xanh dương, trắng, lục lam, đỏ tươi, vàng và blac (k)


Có vẻ hữu ích nhưng xin vui lòng bạn có thể giải thích thêm? Chế độ thám tử trên: ah ok, rgbwc ... là viết tắt của màu đỏ, xanh lá cây, xanh dương, trắng, lục lam, đỏ tươi, vàng và k?
538ROMEO

10

Đối với một thay thế phổ biến để màu không gây rối với các phương thức tích hợp của đối tượng String, tôi khuyên bạn nên kiểm tra màu cli .

Bao gồm cả màu sắc và phong cách chuỗi như in đậm, in nghiêng và gạch chân.

Để so sánh các mô-đun khác nhau trong thể loại này, xem ở đây .


10

Không có thư viện không có biến chứng chỉ đơn giản:

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

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

1
Sẽ không đơn giản khi bạn phát hiện ra rằng nó không hoạt động với các đối tượng theo cách mà bàn điều khiển xử lý chúng và nó không tôn trọng các loại luồng bàn điều khiển hoặc hỗ trợ TTY, điều này tạo ra nhiều vấn đề hơn. Nó chỉ là một hack sẽ mang lại nhiều vấn đề trên đường.
Vitaly-t

Đó là những gì
JSON.opesify

10

Biểu tượng cảm xúc

Bạn có thể sử dụng màu sắc cho văn bản như những người khác được đề cập trong câu trả lời của họ.

Nhưng bạn có thể sử dụng biểu tượng cảm xúc thay thế! ví dụ bạn có thể sử dụng Bạn có thể sử dụng ⚠️cho các thông báo cảnh báo và 🛑cho các thông báo lỗi.

Hoặc đơn giản là sử dụng những cuốn sách ghi chú này làm màu:

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

Tặng kem:

Phương pháp này cũng giúp bạn nhanh chóng quét và tìm nhật ký trực tiếp trong mã nguồn .

Nhưng phông chữ biểu tượng cảm xúc mặc định của linux không có màu theo mặc định và trước tiên bạn có thể muốn làm cho chúng có màu sặc sỡ.


6

Có hai cách để xem xét việc thay đổi màu sắc cho bảng điều khiển Node.js ngày nay.

Một là thông qua các thư viện đa năng có thể trang trí một chuỗi văn bản bằng các thẻ màu, sau đó bạn xuất ra thông qua tiêu chuẩn console.log .

Các thư viện hàng đầu cho ngày hôm nay:

Và cách khác - vá các phương thức console hiện có. Một trong những thư viện - manakin cho phép bạn tự động thiết lập màu sắc chuẩn cho tất cả các phương pháp giao diện điều khiển của bạn ( log, warn, errorinfo).

Một điểm khác biệt đáng kể so với các thư viện màu chung - nó có thể đặt màu theo toàn cầu hoặc cục bộ, trong khi vẫn giữ định dạng đầu ra và cú pháp nhất quán cho mọi phương thức bảng điều khiển Node.js, sau đó bạn sử dụng mà không phải chỉ định màu, vì tất cả đều được đặt tự động .

Tôi đã phải thay đổi màu nền của giao diện điều khiển thành màu trắng vì các vấn đề về mắt, nhưng phông chữ có màu xám và nó làm cho các thông điệp không thể đọc được. Làm thế nào tôi có thể thay đổi nó?

Cụ thể cho vấn đề của bạn, đây là giải pháp đơn giản nhất:

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

Nó sẽ đặt màu đen cho mỗi console.logcuộc gọi trong ứng dụng của bạn. Xem thêm mã màu .

Màu mặc định được sử dụng bởi manakin :

nhập mô tả hình ảnh ở đây


6

Tôi quá tải các phương thức giao diện điều khiển.

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");

Đầu ra là.

nhập mô tả hình ảnh ở đây


Điều này không hoạt động với cú pháp định dạng. Ví dụ: console.info('Hello %s', 'World!')được cho là hiển thị Hello World!, và không Hello %s World!.
Vitaly-t

@ Vitaly-t thử cái này : nó sẽ hoạt động.
Serge

5

Đi qua câu hỏi này và muốn sử dụng một số màu trên thiết bị xuất chuẩn mà không có bất kỳ sự phụ thuộc nào. Điều này kết hợp một số câu trả lời tuyệt vời khác ở đây.

Đây là những gì tôi đã có. (Yêu cầu nút v4 trở lên)

// 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()

Chỉ cần yêu cầu tệp, sau đó sử dụng nó như vậy:

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

Các mã màu được xác định trước có sẵn ở đây


1
Chẳng hạn, sẽ không hoạt động chính xác khi được chuyển hướng vào một tệp nhật ký.
Vitaly-t

4

bảng điều khiển sơn

Nhật ký màu đơn giản. Hỗ trợ kiểm tra các đối tượng và cập nhật dòng đơn Gói này chỉ cần sơn lại giao diện điều khiển.

Tải về

npm install paint-console

sử dụng

require('paint-console');

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

bản giới thiệu


4

Tôi không muốn bất kỳ sự phụ thuộc nào cho việc này và chỉ những điều này hoạt động với tôi trên OS X. Tất cả các mẫu khác từ các câu trả lời ở đây đều cho tôi Octal literallỗi.

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"

nguồn: https://coderwall.com/p/yphywg/printing-colorful-text-in-terminal-when-run-node-js-script


4

Tôi thấy câu trả lời này ở trên ( https://stackoverflow.com/a/41407246/4808079 ) rất hữu ích, nhưng không đầy đủ. Nếu bạn chỉ muốn tô màu một cái gì đó một lần, tôi đoán nó sẽ ổn, nhưng tôi nghĩ việc chia sẻ nó ở dạng chức năng có thể chạy được sẽ áp dụng nhiều hơn cho các trường hợp sử dụng thực tế.

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));
}

Sử dụng nó như thế này:

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

logger / 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')();

Sau đó sử dụng nó như:

console.logBgGreen(" grüner Hintergrund ")

4

Điều này phần nào phụ thuộc vào nền tảng của bạn. Cách phổ biến nhất để làm điều này là bằng cách in các chuỗi thoát ANSI. Ví dụ đơn giản, đây là một số mã python từ tập lệnh xây dựng máy xay sinh tố:

// 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'
}

Để sử dụng mã như thế này, bạn có thể làm một cái gì đó như

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

Tôi nhận được "Trình tự thoát Octal không được phép trong chế độ nghiêm ngặt."
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

Bạn cũng có thể sử dụng colorworks .

Sử dụng:

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

Để làm cho cuộc sống dễ dàng hơn, bạn cũng có thể thực hiện một chức năng với nó.

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

Bây giờ bạn có thể làm:

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

2

Máy làm mát

Nó khá tốt để sử dụng hoặc mở rộng. Bạn có thể sử dụng đơn giản:

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

Hoặc với cấu hình:

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

Và dường như thực sự buồn cười để mở rộng:

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'));

Xem mô-đun làm mát


điều này sẽ không hoạt động chính xác trong Node.js khi được chuyển hướng vào một tệp nhật ký.
Vitaly-t

2

Tôi đã tạo mô-đun của riêng mình, StyleMe . Tôi đã làm nó để tôi có thể làm nhiều với việc gõ ít. Thí dụ:

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.

Nó cũng có thể được lồng nhau:

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

Hoặc, nếu bạn không muốn mở rộng nguyên mẫu chuỗi, bạn có thể chỉ cần một trong 3 tùy chọn khác:

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

1

Trong Ubuntu, bạn chỉ cần sử dụng mã màu:

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

Tại sao không sử dụng require?
jhpratt ĐÁNG TIN CẬY GOFUNDME

Đó là một vài năm trước đây. Nó không cần thiết cho thiết bị xuất chuẩn, có thể bây giờ nó đã được nhập theo mặc định.
Kenjy Minamori

À, được rồi Tôi chỉ tò mò vì nó không giống như sysđược sử dụng ở bất cứ đâu. Nó thực sự không cần thiết ngày nay, mặc dù!
jhpratt ĐÁNG TIN CẬY GOFUNDME

1

nút màu

Cung cấp các chức năng để in văn bản màu và cũng để thực hiện định dạng văn bản như in đậm, nhấp nháy, v.v.


3
Trong khi liên kết bạn cung cấp có thể trả lời câu hỏi. Tốt nhất là đặt các phần thiết yếu của giải pháp của bạn trực tiếp vào câu trả lời của bạn trong trường hợp trang tại liên kết hết hạn trong tương lai.
Kmeixner

1

Tôi thực sự thích câu trả lời của @ Daniel, nhưng các hàm console.log {color} không hoạt động giống như console.log thông thường. Tôi đã thực hiện một vài thay đổi và bây giờ tất cả các tham số cho các chức năng mới sẽ được chuyển đến console.log (cũng như các mã màu).

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:

Cách đơn giản, thêm màu thời gian vào tin nhắn, bạn không cần thay đổi mã, sử dụng keep console.log ('dir') hoặc console.err ('error')

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)
    );
  };
});

nhập mô tả hình ảnh ở đây


0

Nếu bạn đang sử dụng Windows CMD, hãy chuyển đến Thuộc tính / Màu sắc của thiết bị đầu cuối (trên cùng bên trái) và sau đó xác định lại giá trị RGB của màu tấn công. Trong trường hợp của tôi, tôi tin rằng đó là hình vuông màu thứ năm từ bên trái, mà tôi đã đổi thành (222.222.222). Sẽ không có vấn đề gì nếu nút radio hiện được chọn hiển thị Văn bản màn hình hoặc Nền màn hình khi bạn chỉ xác định lại màu "hệ thống" cụ thể đó. Khi bạn đã thay đổi màu, đừng quên chọn lại màu ưa thích cho nền hoặc văn bản trước khi nhấp vào OK.

Sau khi thay đổi, tất cả các thông báo màu đỏ từ Node (Ember trong trường hợp của tôi) đều hiển thị rõ ràng.


0

Đây là một cách tiếp cận cho Windows 10 (có thể cho 7) và nó thay đổi bảng màu (chủ đề) cho cmd, npm terminal, không chỉ đầu ra giao diện điều khiển cho một ứng dụng cụ thể.

Tôi tìm thấy plugin Windows hoạt động - Color Tool , có lẽ được phát triển dưới cái ô Windows. Một mô tả có sẵn tại liên kết .

Tôi đã thêm thư mục colortool vào biến đường dẫn môi trường hệ thống và bây giờ nó có sẵn bất cứ khi nào tôi khởi động terminal (dấu nhắc lệnh của NodeJs, cmd).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.