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


97

我决定尝试使用npm脚本作为构建工具,到目前为止,我还是喜欢它。我要解决的一个问题是,当运行脚本运行jshint时,如果没有通过处理,我会收到很多“ npm ERR!”。线。我想抑制这些,因为短绒棉的输出更有意义。

是否有一种很好的全局设置方法,并且有一种为每次运行的脚本设置它的方法吗?

node.js  npm 


关于这个主题的问题在于:github.com/npm/npm/issues/6124
daotoad

Answers:


166

所有脚本:

您可以通过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运行myCmd - --deploy
arcseldon

4
这真的很荒谬(不怪你)。我不想追加|| true;那不是一个好的解决方案。我不想使用来使所有其他命令静音.npmrc。一直运行这个特定脚本-s似乎也很愚蠢。有没有人找到使单个脚本静音的更好的解决方案?
PascalVKooten'7

万一其他人遇到了这个问题,那就是一个未解决的问题-参见github.com/npm/npm/issues/8821
伊恩·罗特利奇

loglevel = silent在我看来似乎太过分了。这甚至可以使错误消息静音(尽管它们仍将被写入本地文件)。根据此建议之后的链接,按优先顺序排列的可能日志级别为:“静默”,“错误”,“警告”,“通知”,“ http”,“ timing”,“ info”,“ verbose” ”,“傻”。我建议使用“错误”(将禁止显示警告,但显示错误)或“警告”(将包含警告)。npm通常没有理由向我们展示它如何决定运行什么,这是默认情况下的行为。感觉就像调试文本。
约翰·迪恩

好,我需要纠正自己,并提出异议。也许甚至是node.js错误?当我创建带有'loglevel = error'的.npmrc文件时,运行'npm test'仍然通过npm的逻辑来追踪,该逻辑是关于如何确定要运行的命令行的。节点版本8.12.0,npm版本5.8.0。
约翰·迪恩

45

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

npm install --quiet

--quiet将显示stderr和警告,--silent应抑制几乎所有情况

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

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

或更少

npm install &> /dev/null

7
在Windows中,它是npm install --quiet> NUL
Manohar Reddy Poreddy

4
这个问题专门与运行npm脚本有关
hackel

--quiet适用于npm脚本;)@hackel
IG Pascual

7
npm install --quiet --no-progress 

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


3
这个问题专门与运行npm脚本有关
hackel

0

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

#!/usr/bin/env node

process.removeAllListeners('warning');

// Do your thang without triggering warnings

-1

对于您想要保持沉默而不需要--silent每次添加的单个脚本,您可以制作一个新脚本来调用上一个脚本并添加--silent

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

    "dev-loud": "npm run build && nodemon -r dotenv/config dist/index.js",
    "dev": "npm run dev-loud --silent"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.