【问题标题】:How to suppress output when running npm scripts运行 npm 脚本时如何抑制输出
【发布时间】:2016-03-29 08:05:01
【问题描述】:

我决定尝试使用 npm 脚本作为构建工具,到目前为止我很喜欢它。我想解决的一个问题是,当运行脚本以运行 jshint 时,当某些东西没有通过 linting 时,我得到了大量的“npm ERR!”。线。我想抑制这些,因为 linter 的输出更有意义。

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

【问题讨论】:

标签: node.js npm


【解决方案1】:

所有脚本:

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

在每个npm run 调用上:

npm run --silent <your-script>

或通过以下方式在全局范围内创建.npmrc 文件(此文件可以在您的项目目录或主文件夹中):

loglevel=silent

资源:

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

npmrc:https://docs.npmjs.com/misc/config#loglevel

每个脚本,单独:

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

这将确保脚本始终以0 状态退出。这会诱使 npm 认为脚本成功,从而隐藏 ERR 消息。如果你想更明确,你可以追加|| exit 0,它应该会达到相同的结果。

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

【讨论】:

  • ||如果您尝试将 args 附加到 npm 运行的末尾,则 true 不起作用 - 例如。 npm run myCmd -- --deploy
  • 这真的很荒谬(不是怪你)。我不想追加|| true;这不是一个好的解决方案。我不想使用.npmrc 使所有其他命令静音。并且一直使用-s 运行这个特定的脚本似乎也很愚蠢。有没有人找到更好的解决方案来使单个脚本静音?
  • 万一其他人遇到这个问题,这是一个未解决的问题 - 请参阅 github.com/npm/npm/issues/8821
  • loglevel=silent 对我来说似乎有点矫枉过正。这甚至会使错误消息静音(尽管它们仍将被写入本地文件)。根据此建议后不久的链接,可能的日志级别按优先级顺序为:“silent”、“error”、“warn”、“notice”、“http”、“timing”、“info”、“verbose” “, “愚蠢的”。我建议要么“错误”(这将抑制警告,但显示错误)或“警告”(其中将包括警告)。通常,npm 没有理由向我们展示它如何决定运行什么,这是它默认执行的操作。感觉就像是在调试文本。
  • 好的,我需要更正自己,并提出异议。也许它甚至是一个 node.js 错误?当我创建一个带有“loglevel=error”的 .npmrc 文件时,运行“npm test”仍然通过 npm 的逻辑来确定它如何确定要运行的命令行。节点版本 8.12.0,npm 版本 5.8.0。
【解决方案2】:

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

npm install --quiet

--quiet 将显示标准错误和警告,--silent 应该抑制几乎所有内容

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

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

或更少的冗长

npm install &> /dev/null

【讨论】:

  • 在 Windows 中是 npm install --quiet > NUL
  • 这个问题专门针对运行 npm scripts
  • --quiet 适用于 npm 脚本 ;) @hackel
【解决方案3】:
npm install --quiet --no-progress 

将保留警告和错误,并在支持它的终端上抑制 ADHD 进度条。

【讨论】:

  • 这个问题专门针对运行 npm scripts
  • --quiet 似乎根本不适合我。 --silent 有效,但仍然显示烦人的进度条。 --no-progress 不隐藏进度条。这适用于 npm 7.21.1。
【解决方案4】:

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

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

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

【讨论】:

  • 我认为当(按照您的示例)“dev-loud”脚本出现问题时,“--silent”参数将抑制日志,但初始执行的行“npm run dev”仍将抛出异常
  • 我喜欢这种添加 hacky 帮助消息的方法,例如 "release:message": "echo '\n some long \n multiline message'",否则会被重复打印 ?
【解决方案5】:

您可以通过删除事件侦听器在脚本中执行此操作

#!/usr/bin/env node

process.removeAllListeners('warning');

// Do your thang without triggering warnings

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多