2015-01-26 2 views
6

Ich versuche npm als Aufgabe Läufer zu verwenden/Build-Tool nach dem Lesen dieses Artikels:Mit npm als Aufgabe Läufer/Build-Tool - Probleme mit einigen cli Modulen

How to use npm as a build tool

und während ich Ich habe Erfolg, ich bin auf eine Sache fest. Wenn eine Befehlszeile globales Tool wie JSLint, JSHINT oder ESLINT läuft, npm zeigt immer den Exit-1-Code im Konsolenfenster:

enter image description here

Wie Sie sehen können, der Befehl funktioniert gut, aber npm sieht es als einen Fehler und zeigt die Fehlerprotokollinformationen an. Ist das normal und/oder gibt es eine Möglichkeit, es für bestimmte Befehle auszuschalten?

Zusätzliche Informationen: Das ist Script-Block in meinem package.json config:

"Skripte": { "Start": "Knoten ./src/server/index.js", "test": "", "Fussel": "eslint index.js" }

dann von npm cli I-Typ:

npm run lint 

Dies wird ausgeführt, um das Skript in der package.json Datei mit der Bezeichnung gefunden: "Flusen"

+0

Das sollte eine gute Lektüre für Sie sein: http://substack.net/task_automation_with_npm_run – naomik

Antwort

2

Da Validierungsfehler vorliegen, existiert eslint mit einem Exit-Code 1, der npm glauben macht, dass während der Ausführung ein Fehler aufgetreten ist.

Wenn Sie Linux verwenden, können Sie diesen Trick verwenden, um immer einen Exit-Code 0 zurück:

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

Ich benutze den CLI, so dass True Flag in diesem Kontext nicht funktioniert. – u84six

+0

Sorry, ich sehe, das ist ein Linux-Befehl. Mein dev env ist Windows, daher denke ich, dass es am besten ist, das Flag --silent zu verwenden. Siehe meine Antwort. – u84six

1

Ich habe ein Work-around für dieses Problem gefunden. In den Skripte blockieren, verwende ich das Testskript den npm Befehl für Flusen mit der --silent Flagge zu nennen:

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

Dann auf der Kommandozeile kann ich geben:

npm run test 

Jetzt ist es Arbeiten ohne das Fehlerprotokoll zu zeigen.

2

NPM-Skripte funktionieren absichtlich so, dass ein Exit-Code von 1 oder 2 (alles andere als 0) die Ausführung von Post-Tasks auf die gleiche Weise verhindert, wie sie auf Ihrem Betriebssystem ausgeführt werden .

Mit der --silent Flagge ist eine Option, aber kann ein Problem werden, wo es andere Probleme mit dem Skript ist, und Sie werden Ihren Kopf gegen eine Wand aufzuwickeln hämmern, wenn Sie beginnen, ohne Flusen/Testfehler Fehler bauen .

Das Beste, was Sie hier tun können, ist, Ihren Prozess so zu konfigurieren, dass er in Situationen, in denen Sie dies nicht möchten, keinen Fehlerbeendigungscode ausgibt. In diesem Fall ... haben Sie einige Fehler, die aufgrund Ihrer eslint-Konfiguration rechtmäßig auftreten. Dies führt zu einem Fehlerbeendigungscode und verhindert (zu Recht), dass die nächste Aufgabe ausgeführt wird. Das ist eigentlich sehr nützlich wenn Sie npm Skripte verwenden, weil Sie verhindern können, dass Test/Build-Schritte unnötig ausgeführt werden, wenn Sie wissen, dass es Fehler gibt.

In diesem Fall möchten Sie Ihrem Projekt eine .eslintrc Datei hinzufügen und einige Regeln angeben, die sich sowohl um die Linting-Fehler als auch um die npm-Fehler kümmern.

Ich habe eine schnelle Probe .eslintrc Datei unten veröffentlicht. Wenn eslint in der Befehlszeile ausgeführt wird, erkennt es automatisch alle .eslintrc oder .eslintignore Dateien und hält sich an ihre Konfigurationen.

Das folgende Beispiel wird Ihre flackernden Fehler bereinigen, aber bedenken Sie, dass es den Beendigungscode ändert, der geworfen würde, wenn eslint diesen "Auslöser" aufhebt. Wenn ich eine Regel in 0 ändere, bedeutet dies, dass sie Sie nicht benachrichtigt, wenn sie dieses Muster erkennt.

Sie können mehr über die Verwendung lesen und configuring rule codes oder ... Besuche ein Samen Projekt, das ich erstellt haben, die npm als Build-Tool verwendet und umfasst eslint Nutzung: 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

ich verwenden:

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

Grüße!

Verwandte Themen