2014-11-08 2 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, но я не думаю, что могу просто добавить пользовательскую команду без forking npm вот так ... Надеюсь, что я ошибаюсь!

Но если да, то лучше ли мне отталкивать такую ​​задачу, как такой инструмент, как Grunt? Благодаря!

+2

Очень досадный вопрос. Странно, что трудно найти какое-либо обсуждение об этом ... –

+0

Раздался раздражение тем же самым случаем, используя 'jscs' как linter в run-script. –

+0

Есть пара вопросов об этом, поданных на NPM. https://github.com/npm/npm/issues/6124 https://github.com/npm/npm/issues/8821 – daotoad

ответ

1

Я только что пытался выяснить то же самое. Не идеальный ответ, но он вроде работал, чтобы указать пылеобразование как претест скрипт (docs) как так:

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

Затем, когда вы вводите в npm test в первый раз, вы только получите ошибку однострочной из НПМ. Очевидно, это означает, что вы не сможете запускать свои тесты, если вы не начертали.

Другой вариант - использовать какой-то сторонний бегун задачи, например Make, Grunt или Gulp.

Я использовал только 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 test и make lint выполнять эти команды.

+0

Да, пока я только что использовал глоток и ворчание, он отлично работает, хотя добавляет дополнительный шаг установки для бегунов CLI и еще одна команда, чтобы помнить, что я хотел бы оптимизировать. Не большое дело, но я оставлю вопрос открытым, чтобы узнать, не придумал ли кто-нибудь что-нибудь (и проверьте, есть ли проблема для npm для него :-)) –

1

Вы можете отключить ошибки на redirecting the stderr до/dev/null. Например:

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

работает:

$ npm run test 2> /dev/null 

теперь будет посылать все ошибки НПМ /dev/null но нормальный вход будет по-прежнему виден в консоли.

Поскольку ошибка возникает при НПМ, после карма выхода с ненулевым статусом, выполнив следующие действия недостаточно:

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

но вы можете преодолеть его, создав еще одну задачу, которая вызывает эту задачу с STDERR перенаправление:

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

это будет гарантировать, что НПМ сообщения об ошибках скрыты

19

Используйте п вечера запустить --silent вариант:

$ npm run --silent test 

Даже меньше набирать, если вы определяете псевдоним оболочки:

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

Или '' 'npm run -s test''' – Rockallite

+2

Не работает в случае использования OP. Они хотят запустить «npm run lint» в командной строке и указать в записи сценария в package.json, что скрипт lint не должен печатать бесполезное сообщение. Например, можно надеяться, что '' скрипты: {"tslint": "tslint", "lint": "npm run --silent tslint src/**/*. Ts"} 'может работать. Но нет. Бесполезное шумное сообщение рвет вперед. – daotoad

11

Если вы не заботитесь о сохранении кода возврата процесса ЛИНТЕР, вы всегда можете настроить ваш package.json вот так:

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

Вы также можете установить 'cash-true', если вы хотите, чтобы это также работало на окнах – Tim

Смежные вопросы