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



简介

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

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

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

$ node test.js
yellow text

(文本实际上是黄色的(。

这与我执行程序的控制台无关。我尝试了Windowscmd.exeGitbash(mintty(。

问题

如果我将我的程序作为npm包.json脚本的一部分,例如使用

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

并在mintty中执行

$ npm run example
> exampleproject@0.0.1 example D:exampleproject
> node test.js
yellow text

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

所以我认为minttynpm之间的交互一定有问题。即使使用mintty中的npm run example,我也能为文本着色吗?

使用过的版本

  • Windows 7 SP1 64位
  • Git 2.5.3-32-比特与mintty 2.0.3
  • 节点4.1.0 32位
  • npm 2.14.3
  • 粉笔1.1.1

更多测试后更新

我尝试了不同版本的相关组件,我想我已经确定了mintty。如果我在安装时用"使用windows命令提示符">而不是的"使用mintty">配置它,彩色npm输出在Git上运行

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

  • 在MSys 1.0.11中使用mintty 1.1.3时,颜色根本不起作用,即即使是简单的node test.js也没有彩色输出
  • MSys2(版本20150916(中的最新薄荷糖2.1.5的颜色也不起作用

但是如果我在使用node test.js直接执行脚本时使用mintty 2.0.3的Git bash(没有npm(,彩色输出就可以工作了。

所以现在我完全困惑了。。。

当前的解决方案似乎是(在windows上(设置一个环境变量:

FORCE_COLOR=true

src:windows 上gitbash中的颜色支持检测问题

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

Node.js在windows/cygwin nodejs/Node#3006上不作为tty运行

Git Bash错误-无法读取属性"substring"#272。

不确定,它是否会被修复。

简而言之,MSYS/Cygwin/etc。(使用Mintty作为终端模拟器(在"fake"控制台内运行bash,这与节点不兼容。它可能对任何其他终端模拟器都是一样的。

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

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

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

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

一个解决方法是转义彩色字符串,用uu%1B替换所有%1B,然后将其取消转义。

我在这里使用粉笔,当在bash中运行时,它会自动禁用。。。但你可以绕过它,"强迫"它启用

const chalk = require('chalk')
chalk.enabled = true
chalk.level = 3
function fixColors (str) {
  return unescape(
    escape(
      str
    )
    .replace(/%1B/i, '\u%1B')
  )
}
console.log(fixColors(chalk.blueBright('is it blue?!')))

我希望这能帮助到某人:(它很难看,但很容易实现。

我成功地将其添加到显示粉笔输出的节点js文件中:

process.env.FORCE_COLOR = true

相关内容

  • 没有找到相关文章

最新更新