我有一个非常简单的混合任务,实际上它包装npm
命令并将其输出返回到命令行:
defmodule Mix.Tasks.JsLint do
use Mix.Task
@shortdoc "Runs javascript lint"
def run(_args) do
System.cmd("npm", ["run", "lint"], into: IO.stream(:stdio, :line), stderr_to_stdout: true)
end
end
问题是,如果我在命令行中运行npm run lint
,它将返回彩色输出。但如果我运行mix js_lint
,它将返回非彩色输出。
哪里有松散的颜色?我该如何解决这个问题?
更新 我正在使用eslint。
答案 0 :(得分:1)
这里的问题是大多数终端应用程序使用isatty
(或等效的)来检查stdout是否是交互式shell,如果是,则禁用彩色输出,以便更改颜色的转义序列不会结束在我的日志文件中等等。我不知道产生进程的任何简单方法,并使该进程认为它附加到终端(有一些,如this或使用像{{3}这样的包}),但是因为你正在使用eslint
,你可以通过将--color
传递给它来强制它输出颜色,即使它认为它没有以交互方式运行。您可以将其添加到"lint"
中的package.json
条目,如果您的旧条目是:
"lint": "eslint ."
将其更改为:
"lint": "eslint . --color"