在运行 npm 脚本时如何抑制输出

我已经决定尝试使用 npm 脚本作为构建工具,到目前为止我喜欢它。我想解决的一个问题是,当运行一个脚本来运行 jshint 时,如果某些内容没有通过 linting,我会得到大量的“ npm ERR!”台词。我想抑制这些,因为从这个短程序输出的结果更有意义。

有没有一种全局设置它的好方法? 有没有一种方法可以为每个脚本运行设置它?

110123 次浏览

所有剧本:

您可以通过抑制整个 npm 的输出来解决这个问题,通过以下几种方式将日志级别设置为 silent:

在每次 npm run调用时:

npm run --silent <your-script>

或者创建一个 .npmrc文件(这个文件可以在您的项目目录-local-或您的主文件夹-global-中) ,具有以下特性:

loglevel=silent

资源:

Npm 日志级别配置: https://docs.npmjs.com/misc/config#loglevel

电台: https://docs.npmjs.com/misc/config#loglevel

每个脚本,单独:

我曾经使用过一个简单的技巧来解决某些脚本(如 linting)的这个问题,那就是在这些脚本的末尾附加 || true。这将在没有任何 npm 配置更改的情况下工作。

这将确保脚本始终以 0状态退出。这使 npm 认为脚本成功了,因此隐藏了 ERR消息。如果您想要更加明确,可以改为附加 || exit 0,它应该会得到相同的结果。

{
"scripts": {
"lint": "jshint || true",
}
}

您应该能够同时使用 --quiet--silent选项,如

npm install --quiet

--quiet将显示标准错误和警告,--silent应该抑制几乎一切

您还可以将 stdout/stderr 发送到 /dev/null,如下所示:

npm install > '/dev/null' 2>&1

或者不那么啰嗦

npm install &> '/dev/null'
npm install --quiet --no-progress

将保持警告和错误,并禁止终端上的多动症进度条支持它。

您可以在脚本中通过删除事件侦听器来完成此操作

#!/usr/bin/env node


process.removeAllListeners('warning');


// Do your thang without triggering warnings

对于希望保持静默而不必每次都添加 --silent的单个脚本,可以创建一个调用前一个脚本并添加 --silent的新脚本。

我在 package.json 中的示例脚本:

    "dev-loud": "npm run build && nodemon -r dotenv/config dist/index.js",
"dev": "npm run dev-loud --silent"