如果在Git bash(mintty)中使用npm脚本,则没有控制台颜色

Des*_*sty 16 windows git node.js npm mintty

介绍

使用粉笔我已经编写了一个用于打印彩色文本的小型控制台程序,我使用NodeJS执行:

console.log(require('chalk').yellow('yellow text'));
Run Code Online (Sandbox Code Playgroud)

程序以黄色打印字符串"黄色文本".如果我直接用节点执行脚本,它输出:

$ node test.js
yellow text
Run Code Online (Sandbox Code Playgroud)

(文本确实是黄色的).

这与我执行程序的控制台无关.我尝试了Windows cmd.exeGit bash(mintty).

问题

如果我将我的程序包含在npm package.json脚本中,例如使用

...

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

...
Run Code Online (Sandbox Code Playgroud)

并在执行它mintty

$ npm run example

> exampleproject@0.0.1 example D:\exampleproject
> node test.js

yellow text
Run Code Online (Sandbox Code Playgroud)

文本实际上不是黄色,而是控制台的默认颜色.但在Windows cmd.exe中这是有效的,即文本黄色的!

所以我假设minttynpm之间的交互一定存在问题.我可以得到甚至彩色文本npm run examplemintty

二手版本

  • Windows 7 SP1 64位
  • Git 2.5.3-32位,精简2.0.3
  • 节点4.1.0 32位
  • npm 2.14.3
  • 粉笔1.1.1

更多测试后更新

我尝试了不同版本的相关组件,我想我已经把它钉到了薄荷.彩色NPM输出工作使用Git,如果我将其配置与"使用Windows命令提示符",而不是"使用mintty"同时安装.

之后,我尝试了不同版本的mintty,看看它是否可能是一个bug:

但是如果我使用Git bash与mintty 2.0.3同时直接执行脚本node test.js(没有npm),那么彩色输出就有效了.

所以现在我完全糊涂了......

ler*_*yse 16

当前的解决方法似乎是(在Windows上)设置环境变量:

FORCE_COLOR=true

src:Windows上的git bash中的颜色支持检测问题


小智 13

它与Node.js上的已知问题有关:

Node.js在windows/cygwin nodejs/node#3006上没有运行tty

Git Bash错误 - 无法读取属性'substring'#272.

不确定,是否会被修复.

简而言之,MSYS/Cygwin /等(使用Mintty作为终端模拟器)在"假"控制台内部运行bash,这与节点不相处.对于任何其他终端仿真器,它可能是相同的.

要检查是否在TTY上下文中运行Node.js,请尝试以下操作:

cd c:/nodejs
./node -p -e "Boolean(process.stdout.isTTY)"
Run Code Online (Sandbox Code Playgroud)

注意,node -p -e "Boolean(process.stdout.isTTY)"在这种情况下,简单运行不会起作用.

  • 这仍然是真的吗? (2认同)

Sim*_*ing 5

创建~/.bashrc带有内容的文件可以export FORCE_COLOR=true使颜色在Windows 10的Git Bash中对我有用,正如diego nunes和leroyse用更笼统的术语指出的那样。