如果在 Git bash (mintty) 中使用 npm 脚本,则没有控制台颜色
No console colors if using npm script inside a Git bash (mintty)
简介
使用chalk I have written a small console program for printing colored text, which I execute with NodeJS:
console.log(require('chalk').yellow('yellow text'));
程序以黄色打印字符串"yellow text"。如果我直接用 node 执行脚本,它输出:
$ node test.js
yellow text
(文字确实是黄色的)
这独立于我执行程序的控制台。
我尝试了 Windows cmd.exe 和 Git bash (mintty).
问题
如果我将我的程序作为 npm package.json script 的一部分,例如与
...
"scripts": {
"example": "node test.js"
}
...
并在 mintty 中执行
$ npm run example
> exampleproject@0.0.1 example D:\exampleproject
> node test.js
yellow text
文本实际上不是黄色,而是控制台的默认颜色。
但是在 Windows cmd.exe 这有效,即文本 是 黄色!
所以我假设 mintty 和 npm 之间的交互一定有问题。我可以在 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 上。彩色 npm 输出 worked with Git,如果我用 'Use windows command prompt'[=87 配置它=] 而不是安装时的 'Use mintty'。
之后我尝试了不同版本的 mintty 看它是否是一个错误:
- 使用 mintty 1.1.3 inside a MSys 1.0.11 时,颜色 根本 没有 工作 ,即即使是简单的
node test.js
也没有彩色输出。
- 在 MSys2 (version 20150916) 中使用最新的 mintty 2.1.5,颜色也 没有 。
但是 如果我使用 Git bash 和 mintty 2.0.3 直接使用 node test.js
执行脚本,那么彩色输出会起作用(没有 npm)。
所以现在我完全糊涂了...
它与 Node.js 上的已知问题有关:
Node.js doesn't run as tty on windows / cygwin nodejs/node#3006
Git Bash Error - Cannot read property 'substring' #272。
不确定,是否会修复。
简而言之,MSYS / Cygwin / etc.(使用Mintty作为终端仿真器)运行s bash 在 "fake" 控制台中,这与 node.js 不兼容。对于任何其他终端仿真器,它可能都是一样的。
要检查 Node.js 是否在 TTY 上下文中 运行 试试这个:
cd c:/nodejs
./node -p -e "Boolean(process.stdout.isTTY)"
请注意,在这种情况下,简单地 运行ning node -p -e "Boolean(process.stdout.isTTY)"
不会奏效。
当前的解决方法似乎是(在 windows 上)设置环境变量:
FORCE_COLOR=true
解决方法是转义彩色字符串,将所有 %1B
替换为 \u\u%1B
,然后取消转义。
我在这里使用粉笔,当 运行 在 bash 中时它会自动禁用...但是你可以绕过它并 "force" 它被启用
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?!')))
我希望这对某人有所帮助 :)
它很丑,但很容易实现。
创建内容为 export FORCE_COLOR=true
的文件 ~/.bashrc
使 Git Bash 和 Windows 10 中的颜色对我有用,正如 slightly 中所指出的diego nunes 和 leroyse 的更通用术语。
我成功地将其添加到显示粉笔输出的节点 js 文件中:
process.env.FORCE_COLOR = true
简介
使用chalk I have written a small console program for printing colored text, which I execute with NodeJS:
console.log(require('chalk').yellow('yellow text'));
程序以黄色打印字符串"yellow text"。如果我直接用 node 执行脚本,它输出:
$ node test.js
yellow text
(文字确实是黄色的)
这独立于我执行程序的控制台。 我尝试了 Windows cmd.exe 和 Git bash (mintty).
问题
如果我将我的程序作为 npm package.json script 的一部分,例如与
...
"scripts": {
"example": "node test.js"
}
...
并在 mintty 中执行
$ npm run example
> exampleproject@0.0.1 example D:\exampleproject
> node test.js
yellow text
文本实际上不是黄色,而是控制台的默认颜色。 但是在 Windows cmd.exe 这有效,即文本 是 黄色!
所以我假设 mintty 和 npm 之间的交互一定有问题。我可以在 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 上。彩色 npm 输出 worked with Git,如果我用 'Use windows command prompt'[=87 配置它=] 而不是安装时的 'Use mintty'。
之后我尝试了不同版本的 mintty 看它是否是一个错误:
- 使用 mintty 1.1.3 inside a MSys 1.0.11 时,颜色 根本 没有 工作 ,即即使是简单的
node test.js
也没有彩色输出。 - 在 MSys2 (version 20150916) 中使用最新的 mintty 2.1.5,颜色也 没有 。
但是 如果我使用 Git bash 和 mintty 2.0.3 直接使用 node test.js
执行脚本,那么彩色输出会起作用(没有 npm)。
所以现在我完全糊涂了...
它与 Node.js 上的已知问题有关:
Node.js doesn't run as tty on windows / cygwin nodejs/node#3006
Git Bash Error - Cannot read property 'substring' #272。
不确定,是否会修复。
简而言之,MSYS / Cygwin / etc.(使用Mintty作为终端仿真器)运行s bash 在 "fake" 控制台中,这与 node.js 不兼容。对于任何其他终端仿真器,它可能都是一样的。
要检查 Node.js 是否在 TTY 上下文中 运行 试试这个:
cd c:/nodejs
./node -p -e "Boolean(process.stdout.isTTY)"
请注意,在这种情况下,简单地 运行ning node -p -e "Boolean(process.stdout.isTTY)"
不会奏效。
当前的解决方法似乎是(在 windows 上)设置环境变量:
FORCE_COLOR=true
解决方法是转义彩色字符串,将所有 %1B
替换为 \u\u%1B
,然后取消转义。
我在这里使用粉笔,当 运行 在 bash 中时它会自动禁用...但是你可以绕过它并 "force" 它被启用
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?!')))
我希望这对某人有所帮助 :) 它很丑,但很容易实现。
创建内容为 export FORCE_COLOR=true
的文件 ~/.bashrc
使 Git Bash 和 Windows 10 中的颜色对我有用,正如 slightly 中所指出的diego nunes 和 leroyse 的更通用术语。
我成功地将其添加到显示粉笔输出的节点 js 文件中:
process.env.FORCE_COLOR = true