2015-01-26 15 views
6

che sto cercando di utilizzare NPM come un corridore compito/costruire strumento dopo aver letto questo articolo:Utilizzando npm come un corridore compito/strumento di costruire - che ha problemi con alcuni moduli CLI

How to use npm as a build tool

e mentre io Sto avendo un certo successo, sono bloccato su una cosa. Quando si esegue uno strumento globale da riga di comando come JSLint, JSHINT o ESLINT, NPM mostrerà sempre il codice di uscita 1 nella finestra della console:

enter image description here

Come si può vedere, il comando funziona bene, ma NPM lo vede come un errore e visualizza le informazioni del registro degli errori. È normale e/o esiste un modo per disattivarlo per comandi specifici?

Informazioni aggiuntive: questo è blocco di script nel mio package.json config:

"script": { "Start": "./src/server/index.js nodo", "test": "", "pelucchi": "eslint index.js" }

poi da NPM cli I Tipo:

npm run lint 

Questo eseguirà lo script trovato nel file package.json con l'etichetta: 'lint'

+0

Questa dovrebbe essere un'ottima lettura per voi: http://substack.net/task_automation_with_npm_run – naomik

risposta

2

Poiché esistono errori di convalida, eslint esiste con un codice di uscita 1, che rende npm creduto che ci fosse un errore durante l'esecuzione.

Se stai usando Linux, è possibile utilizzare questo trucco per restituire sempre un codice di uscita 0:

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

Sto usando il cli in modo che la vera flag non funzioni in quel contesto. – u84six

+0

Mi dispiace, vedo che è un comando di Linux. Il mio dev env è Windows, quindi penso che sia meglio usare il flag --silent. Vedi la mia risposta. – u84six

1

ho trovato un work-around per questo problema. Negli script di blocco, io uso lo script di test per chiamare il comando di NPM per lanugine con la bandiera --silent:

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

Poi sulla riga di comando posso digitare:

npm run test 

Ora è il lavorando senza mostrare il log degli errori.

2

Gli script NPM sono progettati per funzionare in questo modo di proposito, in modo che un codice di uscita 1 o 2 (qualsiasi cosa diverso da 0), impedisca l'esecuzione delle attività di post, nello stesso modo in cui funzionerebbe sul sistema operativo .

Utilizzando la --silent bandiera è un'opzione, ma può diventare un problema in cui ci sono altri problemi con lo script, e si finiranno sbattere la testa contro un muro quando il tuo costruisce iniziare malfunzionante senza errori lint/TEST .

La cosa migliore da fare qui ... è configurare il processo in modo che non emetta un codice di uscita errore in situazioni in cui non lo si desidera. In questo caso ... alcuni errori si sono verificati legittimamente in base alla configurazione di eslint. Ciò causerà un codice di uscita errore e (giustamente) impedirà l'esecuzione dell'attività successiva. Questo è in realtà molto utile quando si utilizzano gli script npm, perché è possibile impedire che i passaggi di test/generazione vengano eseguiti in modo non necessario quando si sa che ci sono errori.

Quindi, in questo caso, si desidera aggiungere un file .eslintrc al progetto, e specificare alcune regole che vi sia prendersi cura degli errori linting, così come gli errori NPM.

Ho pubblicato un file di esempio .eslintrc di seguito. Quando si esegue eslint sulla riga di comando, esso rileverà automaticamente qualsiasi file .eslintrc o .eslintignore e si atterrà alle rispettive configurazioni.

Quell'esempio riportato di seguito eliminerà gli errori di sfilacciamento, ma tieni presente che modifica il codice di uscita che verrebbe generato quando eslint preleva quel "trigger". Quando cambio una regola in 0, significa che non ti avviserà quando riconosce quel modello.

Si può leggere di più su valorizzazione e configuring rule codes, o ... controlla un progetto seme ho creato che utilizza NPM come un tool di creazione, e comprende l'utilizzo 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

Io uso questo:

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

Saluti!

Problemi correlati