2015-01-26 4 views
6

Я пытаюсь использовать НПМ в качестве задачи бегуна/построить инструмент после прочтения этой статьи:Использование НПМ в качестве задачи бегуна/построить инструмент - проблемы с некоторыми модулями Cli

How to use npm as a build tool

и в то время как я Имею некоторый успех, я застрял на одном. При запуске из командной строки глобального инструмента, как JSLint, JSHINT или ESLINT, НПМ всегда будет показывать код выхода 1 в окне консоли:

enter image description here

Как вы можете видеть, команда работает отлично, но НПМ видит его как ошибку и отображает информацию журнала ошибок. Является ли это нормальным и/или есть способ отключить его для определенных команд?

Дополнительная информация: это блок сценария в моем package.json конфигурации:

"скрипты": { "старт": "узловые ./src/server/index.js", "тест": "", "пух": "eslint index.js" }

затем из НОГО кли I типа:

npm run lint 

Это будет выполнять скрипт, найденный в файле package.json с метким: 'lint'

+0

Это должно быть замечательно для вас: http://substack.net/task_automation_with_npm_run – naomik

ответ

2

Поскольку есть ошибки проверки, eslint существует с кодом выхода 1, что делает npm считают, что во время его выполнения была ошибка.

Если вы используете Linux, вы можете использовать этот трюк, чтобы всегда возвращать код Выход 0:

"scripts": { "start": "node ./src/server/index.js", "test": "", "lint": "eslint index.js; true" } 
+0

Я использую cli, так что true flag не работает в этом контексте. – u84six

+0

Извините, я вижу, что это команда Linux. Мой dev env - это Windows, поэтому я думаю, что лучше всего использовать флаг --silent. См. Мой ответ. – u84six

1

Я нашел обходной путь для этой проблемы. В сценарии блок, я использую тестовый сценарий, чтобы вызвать команду НПМ для пуха с --silent флагом:

"scripts": { 
"start": "node ./src/server/index.js", 
"test": "npm run-script --silent lint", 
"lint": "eslint index.js"} 

Затем в командной строке можно ввести:

npm run test 

Теперь работая без отображения журнала ошибок.

2

NPM-скрипты предназначены для использования таким образом, чтобы код выхода из 1 или 2 (ничего, кроме 0) не позволял запускать пост-задачи, точно так же, как он работал бы на вашей операционной системе ,

Использование --silent флаг является вариант, но может стать проблемой, где есть и другие проблемы, с помощью сценария, и вы будете наматывать бьешься головой о стену, когда ваши сборки начинают неудачу без ворса/ошибок испытаний ,

Лучшее, что можно сделать здесь ... - это сконфигурировать ваш процесс, чтобы он не выдавал код выхода с ошибкой в ​​ситуациях, когда вы этого не хотите. В этом случае ... у вас есть некоторые ошибки, появляющиеся на законных основаниях на основе вашей конфигурации eslint. Это вызовет код выхода с ошибкой и (по праву) предотвратить запуск следующей задачи. На самом деле это очень полезно, когда вы используете скрипты npm, потому что вы можете запретить выполнение шагов тестирования/сборки, если вы знаете, что есть ошибки.

Итак, в этом случае вы хотите добавить файл .eslintrc в свой проект и указать некоторые правила, которые будут касаться ошибок переименования, а также ошибок npm.

Я разместил быстрый образец .eslintrc файл ниже. При запуске eslint в командной строке он автоматически обнаружит любые файлы .eslintrc или .eslintignore и соблюдает их конфигурации.

Этот образец, приведенный ниже, очистит ваши erint erit, но имейте в виду, он изменяет код выхода, который будет выброшен, когда eslint подберет этот «триггер». Когда я меняю правило на 0, это означает, что он не будет предупреждать вас, когда он распознает этот шаблон.

Вы можете прочитать больше об использовании и configuring rule codes или ... проверить семенной проект я создал, который использует НПМ в качестве инструмента сборки, и включает в себя использование eslint: react-flux-npm-automation

// /path/to/project/.eslintrc 
{ 
    "parser": "babel-eslint", 
    "env":{ 
     "browser":true, 
     "node":true, 
     "es6":true 
    }, 
    "rules": { 
     "strict":0, 
     "quotes":0, 
     "no-unused-vars":0 
    } 
} 
3

Я использую это:

"scripts": { 
    "start": "node ./src/server/index.js", 
    "lint": "eslint index.js || exit 0" 
} 

С уважением!