2015-09-25 21 views
7

Ho una cartella (un progetto) con 3 sottocartelle (client, server, risorse). Ogni sottocartella ha un comando diverso per iniziare e lavorare sul progetto. Ho bisogno di avviare le 3 app. Questo è il layout cartella ei comandi che usano per iniziare ogni sottoprogetto:È possibile utilizzare npm per eseguire script in più sottocartelle?

  • progetto
    • cliente (ionica servire)
    • del server (indice nodo)
    • attivi (http server -p 8082)

Attualmente, vado a ciascuna delle tre cartelle e avvio ciascuna delle app. Per rendere il processo più standard, ogni sottoprogetto ha un package.json con uno script di avvio, quindi ho solo cd subfolder && npm start.

La mia domanda: è possibile utilizzare NPM sulla cartella principale (vale a dire, scrivere un package.json lì) in modo tale che io posso solo eseguire il seguente comando e hanno lo stesso (o simile) effetto?

progetto> npm iniziare

Ho provato con il pacchetto parallelshell, ma non ha funzionato (probabilmente a causa del cd:

"scripts": { 
    "start": "parallelshell 'cd app && ionic serve' 'cd api && npm start' 'cd assets && npm start'", 
} 

risposta

4

Il problema è che tutta la vostra e tre gli script sono attività di avvio del server come, il che significa che non sono come un'attività di compilazione (ad esempio) che funziona per 10 secondi e interrompe il processo.

Per ognuno di loro, li lanciare, e il processo continua indefinitly.

Si potrebbe lanciare tutti loro in un modo daemon con qualcosa di simile forever, ma nel tuo caso, ci si trova in modalità dev (così si desidera che tutti i registri, e non desiderate gli errori dal server nodejs mixed con quello ionico ...).

Nel caso in cui non si mente sui registri di miscelazione: https://www.npmjs.com/package/forever (Presumo che ciò fa quasi la stessa cosa di parallelshell ...)

20

È possibile utilizzare "contemporaneamente" per raggiungere questo obiettivo. Quindi, è necessario creare un package.json che sembra qualcosa di simile al seguente:

... 
"scripts": { 
    "client": "cd client && npm start", 
    "server": "cd server && npm start", 
    "assets": "cd assets && ionic serve", 
    "start": "concurrent \"npm run client\" \"npm run server\" \"npm run assets\" ", 
}, 
... 
"devDependencies": { 
    "concurrently": "^1.0.0" 
} 
... 

Nota: Questo farà partire tutti e tre i processi contemporaneamente il che significa che si ottiene in uscita misto di tutti e tre (come già accennato topheman)

Problemi correlati