2016-02-16 16 views
6

Chiamiamo Gulp dal nostro file csproj come stiamo usando Visual Studio 2013 per questo progetto:Run npm installare solo quando necessario e/o parzialmente

<Target Name="AfterBuild"> 
    <Exec Command="gulp" /> 
</Target> 

Tuttavia, dal momento che stiamo ancora di crafting questo nuovo progetto, estendiamo spesso lo gulpfile.js per includere nuovi pacchetti. Lo sviluppatore farà, ad es. npm install gulp-util --save-dev e scrivi una nuova attività, e tutto va bene.

Lo sviluppatore controlla quindi i valori gulpfile.js e packages.json nel nostro VCS. Attualmente:

  • Teamcity ha un passo di build aggiuntivo npm install;
  • Ogni sviluppatore deve eseguire manualmente npm install;

Dovendo ricordare qualcosa che deve essere fatto manualmente non è un ottimo posto in cui trovarsi. A un certo punto abbiamo avuto questo nella nostra csproj di file all'interno del Task ...

<Exec command="npm install" /> 

... poco prima del gulp exec, quindi gli sviluppatori non potevano "dimenticare" di fare questo passaggio manuale. Tuttavia, questo può richiedere uno o più secondi su ciascuna (ri) build, il che è fastidioso.

C'è un modo migliore per risolvere questo? Come gestisci gli aggiornamenti su in progetti in cui grandi team (ish) sviluppano utilizzando Visual Studio?

+0

Che ne dite di chiamare 'npm install' su' AfterRebuild' invece di 'AfterBuild'? – KMoraz

+0

L'avevo preso in considerazione, ma ciò crea un'esperienza di sviluppo oscura. Per esempio. una conseguenza è che dopo un nuovo checkout di questo progetto, un semplice 'Build' non * causa * l'installazione di npm e quindi fallisce. Ma ancora una soluzione da prendere in considerazione se nessuna vera soluzione si presenta ... – Jeroen

risposta

2

Sfortunatamente non è possibile installare solo i nuovi pacchetti in npm, ma è possibile provare a ridurre il tempo trascorso durante questo passaggio con strumenti come npm-fast-install o npm_lazy.

+0

Ovviamente ti meriti la taglia per "* la domanda non ha ricevuto abbastanza attenzione *", dato che sei stato l'unico a dargli qualche visibile attenzione :-). Non è una risposta soddisfacente (vale a dire che si riduce a "* non può essere fatto/solo soluzioni alternative disponibili" "AFAICT).In ogni caso: grazie per i tuoi approfondimenti. – Jeroen

0

npm-install-missing combina npm outdated e npm install per installare tutte le dipendenze mancanti all'interno dell'albero delle dipendenze.

È possibile aggiungerlo al progetto come questo:

<Target Name="AfterBuild"> 
    <Exec command="npm-install-missing" /> 
    <Exec Command="gulp" /> 
</Target> 
0

Un approccio che funziona per me è quello di utilizzare MSBuild incremental build support in combinazione con un file di bollo:

<PropertyGroup> 
    <!-- File with mtime of last successful npm install --> 
    <NpmInstallStampFile>node_modules/.install-stamp</NpmInstallStampFile> 
</PropertyGroup> 
<Target Name="NpmInstall" 
    BeforeTargets="BeforeBuild" 
    Inputs="package.json" 
    Outputs="$(NpmInstallStampFile)"> 
    <Exec Command="npm install" /> 
    <Touch Files="$(NpmInstallStampFile)" AlwaysCreate="true" /> 
</Target> 

Il NpmInstallTarget corre solo quando package.json è più recente di node_modules/.install-stamp e tocca quel file dopo il successo di npm install. In questo modo npm install viene eseguito una volta sola dopo ogni modifica a package.json.

Problemi correlati