npm run-script失败时的silencing错误

osd*_*iab 18 node.js npm

当您运行npm test并且失败时,您将获得测试输出+单个错误消息,如下所示:

npm ERR! Test failed.  See above for more details.
Run Code Online (Sandbox Code Playgroud)

但是,我创建了一个自定义脚本lint,如下所示:

// package.json
{
  // ...
  "scripts": {
    // ... definition for test ...
    "lint": "./node_modules/jsxhint/cli.js src/",
  }
}
Run Code Online (Sandbox Code Playgroud)

好吧,够简单.但是当你运行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...
Run Code Online (Sandbox Code Playgroud)

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

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

Stu*_*ham 23

使用npm run --silent选项:

$ npm run --silent test
Run Code Online (Sandbox Code Playgroud)

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

$ alias run='npm run --silent'
$ run test
Run Code Online (Sandbox Code Playgroud)

  • 对OP的用例不起作用.他们想在命令行上运行`npm run lint`,并在package.json中的脚本条目中指定lint脚本不应该打印无用的消息.例如,人们希望"脚本":{"tslint":"tslint","lint":"npm run --silent tslint src/**/*.ts"}`可能有效.但不是.无用的嘈杂信息呕吐出来. (2认同)

Fed*_* B. 12

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

{
  // ...
  "scripts": {
    // ...
    "lint": "eslint . || true",
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你想在windows上使用它,你也可以安装`cash-true` (2认同)

And*_*rey 1

我只是想弄清楚同样的问题。这不是一个完美的答案,但它可以将 linting 指定为预测试脚本(docs),如下所示:

// package.json
{
  // ...
  "scripts": {
    // ... definition for test ...
    "pretest": "./node_modules/jsxhint/cli.js src/",
  }
}
Run Code Online (Sandbox Code Playgroud)

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

另一种选择是使用某种第三方任务运行程序,例如 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
Run Code Online (Sandbox Code Playgroud)

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