2016-02-16 5 views
6

Wir Gulp unserer csproj-Datei aufrufen, wie wir Visual Studio 2013 für dieses Projekt verwenden:Run npm nur installieren, wenn nötig und/oder teilweise

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

Da wir jedoch immer noch das Handwerk frisches Projekt, erweitern wir oft die gulpfile.js, um neue Pakete aufzunehmen. Der Entwickler wird z.B. npm install gulp-util --save-dev und schreiben Sie eine neue Aufgabe, und alles ist gut. Der Entwickler prüft dann die gulpfile.js und packages.json in unserem VCS. Derzeit:

  • Teamcity hat einen zusätzlichen Build-Schritt npm install;
  • Jeder Entwickler muss npm install manuell ausführen;

zu erinnern etwas, das manuell getan werden muss, um nicht ein großartiger Ort ist in. An einem Punkt wir dies innerhalb der Task in unserer csproj Datei hatte ...

<Exec command="npm install" /> 

... kurz vor der gulp Exec, so Entwickler konnten nicht "vergessen", diesen manuellen Schritt zu nehmen. Dies kann jedoch bei jedem (Neu-) Build eine oder sogar mehrere Sekunden dauern, was lästig ist.

Gibt es einen besseren Weg, dies zu lösen? Wie gehen Sie mit Updates für packages.json in Projekten um, in denen große (ish) Teams mit Visual Studio entwickeln?

+0

Wie wäre es mit 'npm install' auf' AfterRebuild' anstatt 'AfterBuild'? – KMoraz

+0

Ich habe das berücksichtigt, aber das macht eine obskure Entwicklererfahrung. Z.B. Eine Konsequenz ist, dass nach einem erneuten Auschecken dieses Projekts ein einfacher 'Build' nicht' npm install' verursacht und somit fehlschlägt. Aber immer noch eine Überlegung, die sich lohnt, wenn sich keine wirkliche Lösung ergibt ... – Jeroen

Antwort

2

Leider gibt es keine Möglichkeit, nur die neuen Pakete in npm zu installieren, aber Sie könnten versuchen, den Zeitaufwand für diesen Schritt mit Tools wie npm-fast-install oder npm_lazy zu reduzieren.

+0

Offensichtlich verdienst du das Kopfgeld für "* die Frage hat nicht genug Aufmerksamkeit erhalten *", da du die einzige warst, die ihr sichtbare Aufmerksamkeit schenkte :-). Keine befriedigende Antwort (d. H. Es kommt auf "* kann nicht gemacht werden/nur Workarounds verfügbar *" AFAICT).Auf jeden Fall: Danke für deine Einsichten. – Jeroen

0

npm-install-missing kombiniert npm outdated und npm install, um alle fehlenden Abhängigkeiten innerhalb der Abhängigkeitsstruktur zu installieren.

Sie können es zu einem Projekt wie folgt hinzu:

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

Ein Ansatz, der für mich arbeitet, ist mit einer Stempeldatei MSBuild incremental build support in Kombination zu verwenden:

<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> 

Die NpmInstallTarget nur läuft wenn package.json ist neuer als node_modules/.install-stamp und es berührt diese Datei nach einem erfolgreichen npm install. Auf diese Weise wird npm install nur einmal nach jeder Änderung an package.json ausgeführt.