2016-02-16 10 views
6
私たちはこのプロジェクトのためのVisual Studio 2013を使用しているとして、我々は csprojファイルからがぶ飲みを呼び出す

実行NPM必要な場合にのみインストールおよび/または部分的に

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

しかし、我々はまだこれを作り上げていることから、新鮮なプロジェクトでは、新しいパッケージを含めるようにしばしばgulpfile.jsを拡張します。開発者は、例えばnpm install gulp-util --save-devと新しい仕事を書いて、すべてが順調です。

開発者は、gulpfile.jspackages.jsonをVCSにチェックインします。現在:

  • Teamcityには追加のビルドステップnpm installがあります。
  • すべての開発者はnpm installを手動で実行する必要があります。 を有する

手動を行う必要があり何かを思い出すになるには絶好のスポットではありません。ある時点で我々はTask内部たちのcsprojファイルでこれを持っていた...

<Exec command="npm install" /> 

... gulp execの直前で、開発者はこの手動の手順を忘れることができませんでした。しかし、これはそれぞれの(再)ビルドで1秒または数秒かかる場合があり、迷惑です。

これを解決する方法はありますか? Visual Studioを使用して大規模なチームが開発されているプロジェクトで、packages.jsonのアップデートをどのように処理しますか?

+0

'AfterBuild'ではなく' AfterRebuild'で 'npm install'を呼び出すのはどうですか? – KMoraz

+0

私はそれを考慮しましたが、それはあいまいな開発者の経験になります。例えば。結局のところ、このプロジェクトを新しくチェックアウトした後、単純な 'Build 'は' npm install'を引き起こさないため失敗します。しかし実際の解決法がそれ自体を提示しない場合に考慮する価値のある回避策... – Jeroen

答えて

2

残念ながら、npmに新しいパッケージのみをインストールする方法はありませんが、npm-fast-installまたはnpm_lazyのようなツールを使用して、このステップで費やされた時間を短縮することができます。

+0

明らかに、「*質問は十分な注意を受けていません」という恩恵を受ける価値があります。満足できる答えではありません(つまり、「*できません/回避策のみ利用可能*」AFAICT)。いずれにせよ、あなたの洞察に感謝します。 – Jeroen

0

npm-install-missingは、依存関係ツリー内に欠けているすべての依存関係をインストールするためにnpm outdatednpm installを組み合わせます。

あなたはこのようなあなたのプロジェクトに追加することができます:

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

を私の作品のアプローチはスタンプファイルと組み合わせてMSBuild incremental build supportを使用することです:

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

NpmInstallTargetにのみ実行されますpackage.jsonnode_modules/.install-stampより新しい場合は、成功した後にそのファイルに触れますnpm install。このようにnpm installは、変更するたびに1度だけ実行され、package.jsonになります。

関連する問題