2016-06-28 14 views
8

Sto usando npm run script per eseguire attività come "build" e "test".Posso nascondere o silenziare "npm ERR!" uscita quando si utilizza lo script di esecuzione npm?

Per esempio, i miei package.json è simile al seguente:

{ 
    "name": "fulfillment-service", 
    "version": "1.0.0", 
    "description": "Endpoint for CRUD operations on fulfillment status", 
    "main": "src/server.js", 
    "scripts": { 
    "build": "tsc", 
    "test": "tape tests/*.js" 
    }, 
    "dependencies": {}, 
    "devDependencies": { 
    "typescript": "^1.8.10" 
    } 
} 

Quando eseguo npm run build ed è successo, l'uscita è il seguente:

> [email protected] build d:\code\fulfillment-service 
> tsc 

Quando eseguo npm run build e viene a mancare , l'output è il seguente:

> [email protected] build d:\code\fulfillment-service 
> tsc 
src/server.ts(51,81): error TS2339: Property 'connection' does not exist on type 'IncomingMessage'. 
npm ERR! Windows_NT 10.0.10586 
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "build" 
npm ERR! node v6.2.1 
npm ERR! npm v3.9.3 
npm ERR! code ELIFECYCLE 
npm ERR! [email protected] build: `tsc` 
npm ERR! Exit status 2 
npm ERR! 
npm ERR! Failed at the [email protected] build script 'tsc'. 
npm ERR! Make sure you have the latest version of node.js and npm installed. 
npm ERR! If you do, this is most likely a problem with the fulfillment-service package, 
npm ERR! not with npm itself. 
npm ERR! Tell the author that this fails on your system: 
npm ERR!  tsc 
npm ERR! You can get information on how to open an issue for this project with: 
npm ERR!  npm bugs fulfillment-service 
npm ERR! Or if that isn't available, you can get their info via: 
npm ERR!  npm owner ls fulfillment-service 
npm ERR! There is likely additional logging output above. 
npm ERR! Please include the following file with any support request: 
npm ERR!  d:\code\fulfillment-service\npm-debug.log 

Questo riempie l'intera console di informazioni inutili, e devo scorrere fino in cima per vedere perché ha fallito.

Esiste comunque la possibilità di nascondere/silenziare le righe che iniziano con npm ERR! durante lo sviluppo?

+2

'npm run build --silent' – gcampbell

+2

C'è un problema relativo all'output degli script di esecuzione. Vedi [npm/8821] (https://github.com/npm/npm/issues/8821) – styfle

risposta

10

È necessario utilizzare npm run build --silent.

Questo non è documentato in npm help, npm help run, o qualsiasi altra cosa ovvia, ma con qualche ricerca su internet si può scoprire che apparently è documentato in npm help 7 config. È inoltre possibile utilizzare l'opzione loglevel in .npmrc.

La (breve: -s) --silent opzione sopprime:

  • Le due linee che iniziano con > che dicono quello comando che si sta eseguendo.
  • npm ERR! errori.
  • Creazione di un npm-debug.log in caso di errore.

Nota: l'utilizzo di script NPM per eseguire altri script NPM può richiedere di utilizzare più di una volta --silent. Esempio package.json:

{ 
    . . . 
    "scripts": { 
    "compile": "tsc", 
    "minify": "uglifyjs --some --options", 
    "build": "npm run compile && npm run minify" 
    } 
} 

Se fai npm run build e dattiloscritto trova un errore, allora si otterrà il npm ERR! da entrambi script. Per sopprimerli, devi modificare lo script di build su npm run compile --silent && npm run minifye eseguirlo con npm run build --silent.

0

C'è un problema depositata il NPM: run-scripts are too noisy while used in development #8821 (citato anche in un commento precedente)

Nella discussione in quel numero, un paio di persone hanno menzionato la creazione di un alias per esempio npr (utilizzando l'opzione --silent gcampbell descrive nella sua risposta). Sebbene --silent possa nascondere alcuni problemi di tipo npm come un package.json non valido, sembra che questa sia una soluzione ragionevole per ora.

alias npr='npm run --silent $*' 

Un altra cosa da quella discussione, che può valere la pena guardare in, anche se è ancora un altro strumento, è yarn che è descritto su un facebook blog post.

0

Come altri hanno notato, il problema con --silent si perde tutto l'output. C'è un altro modo che sembra funzionare per la maggior parte dei casi:

npm run something 2>/dev/null 

Se uno dei binari in esecuzione capita di scrivere a stderr, allora che verranno soppressi. Ma la maggior parte dei nodi scrive su stdout, quindi non dovrebbe essere un problema.

Ovviamente questo funzionerà solo in un ambiente shell che supporta il reindirizzamento dell'output.