chalk を使用して色付きのテキストを印刷するための小さなコンソールプログラムを作成しました。これを NodeJS :
console.log(require('chalk').yellow('yellow text'));
プログラムは、文字列"yellow text"を黄色で出力します。nodeを使用してスクリプトを直接実行すると、次のように出力されます。
$ node test.js
yellow text
(テキストは実際には黄色です)。
これは、プログラムを実行するコンソールとは独立して機能します。 Windowscmd.exeと Git bash (mintty)を試しました。
プログラムを npm package.jsonスクリプト の一部として含めると、例:と
...
"scripts": {
"example": "node test.js"
}
...
minttyで実行します
$ npm run example
> [email protected] example D:\exampleproject
> node test.js
yellow text
テキストは実際には黄色ではなく黄色ですが、コンソールのデフォルトの色です。しかし、Windowsではcmd.exeこれは機能します。つまり、テキストは黄色です!
したがって、minttyとnpmの間の相互作用に問題があるはずだと思います。minttyのnpm run example
でもテキストに色を付けることはできますか?
関連するコンポーネントのさまざまなバージョンを試しましたが、minttyに釘付けにしたと思います。色付きのnpm出力はGitで機能しましたで構成した場合、代わりにWindowsコマンドプロンプトを使用します 'of'インストール中にminttyを使用'。
その後、さまざまなバージョンのminttyを試して、バグの可能性があるかどうかを確認しました。
node test.js
でさえ色付きの出力がありませんでした。しかしnode test.js
(なし)でスクリプトを直接実行しているときにmintty2.0.3でGitbashを使用した場合、色付きの出力は機能していましたnpm)。
だから今私は完全に混乱しています...
これは、Node.jsの既知の問題に関連しています。
Node.jsはWindowsでttyとして実行されません/ cygwin nodejs/node#3006
GitBashエラー-プロパティ 'substring'#272を読み取れません 。
修正されるかどうかはわかりません。
要するに、MSYS/Cygwin /など(Minttyを端末として使用エミュレーター)は、ノードとうまくいかない「偽の」コンソール内でbashを実行します。おそらく他のターミナルエミュレータでも同じです。
Node.jsがTTYコンテキストで実行されているかどうかを確認するには、次のことを試してください。
_cd c:/nodejs
./node -p -e "Boolean(process.stdout.isTTY)"
_
この場合、node -p -e "Boolean(process.stdout.isTTY)"
を実行するだけではうまくいかないことに注意してください。
ファイルの作成~/.bashrc
コンテンツ付きexport FORCE_COLOR=true
Windows10のGitBashで色が機能するようになりました。これは、diegonunesとleroyseによって少し一般的な用語で指摘されています。
回避策は、色付きの文字列をエスケープし、すべての%1B
を\u\u%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?!')))
これが誰かに役立つことを願っています:)醜いですが、実装は簡単です。