Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No console colors if using npm script inside a Git bash (mintty)

Tags:

Introduction

Using chalk I have written a small console program for printing colored text, which I execute with NodeJS:

console.log(require('chalk').yellow('yellow text')); 

The program prints the string "yellow text" in yellow. If I execute the script directly with node, it outputs:

$ node test.js yellow text 

(the text is actually yellow indeed).

This works independent from the console in which I execute the program. I tried Windows cmd.exe and a Git bash (mintty).

Problem

If I include my program as part of an npm package.json script, e.g. with

...  "scripts": {   "example": "node test.js" }  ... 

and execute it in the mintty with

$ npm run example  > [email protected] example D:\exampleproject > node test.js  yellow text 

the text is actually not yellow but in the console's default color. But in the Windows cmd.exe this works, i.e. the text is yellow!

So I assume there must be a problem with the interaction between mintty and npm. Can I get the text colored even with npm run example in mintty?

Used versions

  • Windows 7 SP1 64-bit
  • Git 2.5.3-32-bit with mintty 2.0.3
  • node 4.1.0 32-bit
  • npm 2.14.3
  • chalk 1.1.1

Update after more tests

I tried different versions of the involved components, and I guess I nailed it down to mintty. The colored npm output worked with Git, if I configure it with 'Use windows command prompt' instead of 'Use mintty' while installation.

After that I tried different versions of mintty to see if it could be a bug:

  • With mintty 1.1.3 inside a MSys 1.0.11 the colors did not work at all, i.e. even the simple node test.js had no colored output.
  • With the newest mintty 2.1.5 inside a MSys2 (version 20150916) the color did not work at all, too.

But the colored output had worked if I used Git bash with mintty 2.0.3 while executing the script directly with node test.js (without npm).

So now I am totally confused...

like image 708
Desty Avatar asked Sep 23 '15 14:09

Desty


People also ask

How do I change the color of my console log in node JS?

For example if you want to have a Dim, Red text with Blue background you can do it in Javascript like this: console. log("\x1b[2m", "\x1b[31m", "\x1b[44m", "Sample Text", "\x1b[0m");


2 Answers

The current work around seems to be (on windows) to set an environment variable:

FORCE_COLOR=true

src: Color support detection problem in git bash on windows

like image 83
leroyse Avatar answered Sep 19 '22 16:09

leroyse


It's related to the known problem on Node.js:

Node.js doesn't run as tty on windows / cygwin nodejs/node#3006

Git Bash Error - Cannot read property 'substring' #272.

Not sure, if it will ever be fixed.

In short, MSYS / Cygwin / etc. (using Mintty as terminal emulator) runs bash inside "fake" console, which doesn't get along with node. It will probably be the same for any other terminal emulator.

To check if Node.js is being run in a TTY context try this:

cd c:/nodejs ./node -p -e "Boolean(process.stdout.isTTY)" 

Note, that simply running node -p -e "Boolean(process.stdout.isTTY)" won't do the trick in this case.

like image 34
edloidas Avatar answered Sep 18 '22 16:09

edloidas