DEV Community

loading...
Cover image for node.js: Console Colors 101

node.js: Console Colors 101

skiilaa profile image skiilaa ・2 min read

We've all seen a module or a node.js application that has changed the color of the command prompt font. Heck, even npm changes the color of it's text!

I will show you how to do it.

There are two ways of doing this:

  • Using a module
  • Not using a module

The easy way (with module)

You can go ahead and grab chalk:

npm install chalk

Using chalk is easy! For example, if you want to console.log with blue, then do this:

const chalk = require('chalk');

console.log(chalk.blue('Hello world!'));
Enter fullscreen mode Exit fullscreen mode

Easy, isn't it?

For more documentation, visit the guide.

The not-so-easy way (without a module)

Wanna crank down that dependency list? Noone wants to see code that has too many requires! Go ahead, follow me.

This is a bit messy, but this is basically what the other modules do:

Yes, that long string does the coloring. Here is an explanation:

The "\x1b[36m" part makes your text cyan, the "%s" part gets replaced with your text, and the "\x1b[0m" part resets the colors the way they should be.

But don't worry, you don't have to memorize the color codes. Instead, here is a reference!

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"
Enter fullscreen mode Exit fullscreen mode

Hope this tutorial helped someone out there. Thanks for reading!

Discussion

pic
Editor guide
Collapse
mikeralphson profile image
Mike Ralphson

I've found it's useful to honour (or should that be honor?) the NODE_DISABLE_COLORS environment variable so users can easily disable this feature if it's not wanted. Documentation here.

I simply define colours as:

var red = process.env.NODE_DISABLE_COLORS ? '' : '\x1b[31m';
var green = process.env.NODE_DISABLE_COLORS ? '' : '\x1b[32m';
var normal = process.env.NODE_DISABLE_COLORS ? '' : '\x1b[0m';


`

Collapse
skiilaa profile image
skiilaa Author

Nice addition!

Collapse
lordscarlet profile image
Doug Moore

So it uses ANSI sequences? Sweet. Does it support more than just the color codes?

Collapse
skiilaa profile image
skiilaa Author

Yes! There is an article about text positioning coming out very soon.

Collapse
lordscarlet profile image
Doug Moore

FWIW, I am working on a node.js version of sixteencolors.net

Thread Thread
skiilaa profile image
skiilaa Author

Posted the position article if you're interested.