2014-11-08 80 views
17

當你運行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好看的錯誤,你的棉短絨的輸出後得到一個巨大的錯誤消息:

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這樣的工具這樣的任務?謝謝!

+2

非常討厭的問題。奇怪的是,很難找到任何有關這方面的討論... – 2015-03-12 18:30:07

+0

正在使用'jscs'作爲linter在運行腳本中發生的同樣的事情。 – 2015-04-16 13:09:07

+0

關於NPM上的這個問題有幾個問題。 https://github.com/npm/npm/issues/6124 https://github.com/npm/npm/issues/8821 – daotoad 2016-08-12 06:15:06

回答

1

我剛剛試圖找出相同的。不是一個完美的答案,但它種合作,指定掉毛的預測試腳本(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運行這些命令。

+0

是的,現在我剛剛使用gulp和grunt,它工作正常,雖然增加爲CLI跑步者提供額外的安裝步驟,另一個命令記住我想精簡。不是什麼大不了的,但我會留下這個問題,看看有沒有人提出一些問題(並檢查是否有問題提交給npm :-)) – 2014-11-26 21:59:14

1

您可以通過redirecting the stderr將錯誤消除爲/ dev/null。例如:

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

運行:

$ npm run test 2> /dev/null 

現在將發送所有NPM錯誤/dev/null但正常輸入仍然會在控制檯中可見。

因爲錯誤是由NPM拋出,業力非零狀態退出,執行以下步驟後是不夠的:

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

,但你可以通過創建調用與任務另一個任務戰勝它標準錯誤重定向:

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

這將確保NPM錯誤消息被隱藏

19

使用n個下午運行--silent選項:

$ npm run --silent test 

即使少打字,如果你定義一個shell別名:

$ alias run='npm run --silent' 
$ run test 
+0

或'''npm run -s test''' – Rockallite 2015-06-26 09:14:17

+2

不適用於OP的用例。他們希望在命令行上運行'npm run lint',並在package.json的腳本條目中指定lint腳本不應該打印無用的消息。例如,希望''腳本「:{」tslint「:」tslint「,」lint「:」npm run --silent tslint src/**/*。ts「}'可能有效。但不是。無用的嘈雜信息吐出來。 – daotoad 2016-08-12 05:54:17

11

如果你不關心保留棉短絨過程的返回碼,您可以隨時配置package.json是這樣的:

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

你也可以安裝'cash-true',如果你想這也可以在windows上運行 – Tim 2017-01-14 22:49:28