npm run-script失败时的silencing错误

时间:2014-11-08 05:16:32

标签: node.js npm

当你运行npm test并且它失败时,你会得到测试输出+一条错误信息,如下所示:

npm ERR! Test failed.  See above for more details.

但是,我制作了一个名为lint的自定义脚本,如下所示:

// package.json
{
  // ...
  "scripts": {
    // ... definition for test ...
    "lint": "./node_modules/jsxhint/cli.js src/",
  }
}

好吧,够简单。但是当你运行npm run lint并且它失败时,而不是npm test的漂亮错误,你会在输出linter后得到一个大量的错误信息:

npm ERR! Darwin 14.0.0
npm ERR! argv "node" "/usr/local/bin/npm" "run-script" "lint"
npm ERR! node v0.10.32
npm ERR! npm  v2.1.7
npm ERR! code ELIFECYCLE
# and ~15 more lines...

有没有办法让所有这些垃圾沉默,所以我可以像npm test脚本那样有一个干净的输出?我看到他们是如何在npm源代码中发现错误的,但我不认为我可以添加一个自定义命令而不会像这样npm ...希望我能做到错了!

但是,如果我是,我会把这样的任务推到像Grunt这样的工具上会更好吗?谢谢!

4 个答案:

答案 0 :(得分:22)

使用npm run var pluginName; if (window.pluginName) { pluginName = window.pluginName; } else { pluginName = {}; } 选项:

--silent

如果定义shell别名,则输入更少:

$ npm run --silent test

答案 1 :(得分:11)

如果您不关心保留linter进程的返回代码,可以随时配置package.json

{
  // ...
  "scripts": {
    // ...
    "lint": "eslint . || true",
  }
}

答案 2 :(得分:1)

我一直想弄清楚一样。不是一个完美的答案,但它有点像lint作为预测试脚本(docs),如下:

// package.json
{
  // ...
  "scripts": {
    // ... definition for test ...
    "pretest": "./node_modules/jsxhint/cli.js src/",
  }
}

然后,当您第一次输入npm test时,您只会从NPM获得单行错误。显然,这意味着如果你没有使用,你将无法运行测试。

另一种选择是使用某种第三方任务运行器,例如Make,GruntGulp

我只使用Make,我认为它是最轻松的设置(至少在OSX和Linux上,不确定Windows)。

在根目录中创建一个Makefile,如下所示:

lint:
    ./node_modules/.bin/jslint ./*.js # or whatever your lint command is

test:
    ./node_modules/.bin/mocha test/*.js # or whatever your test command is

.PHONY: lint test

然后输入make testmake lint来运行这些命令。

答案 3 :(得分:1)

您可以将redirecting the stderr的错误静音到/ dev / null。例如:

{
 "test": "karma start" (package.json)
}

跑步:

$ npm run test 2> /dev/null

现在会将所有npm错误发送到/dev/null,但正常输入仍会在控制台中显示。

因为npm抛出了错误,在karma退出非零状态后,执行以下操作是不够的:

 {
     "test": "karma start 2> /dev/null"
 }

但您可以通过创建另一个使用stderr重定向调用该任务的任务来克服它:

 {
     "test": "karma start",
     "test:silent": "npm run test 2> /dev/null" 
 }

这将确保隐藏 npm 错误消息