2016-08-25 8 views
8

NPMベースのツール(grunt)を使用してHTML5フロントエンドを構築しています。NPM連続統合のベストプラクティス

私の継続的な統合ビルドプロセスの最初のステップの1つは、npm installを実行することです。

npm installは、スローです。ローカルのNPMプロキシキャッシングアーティファクト(SonatypeのNexus 3)を使用しても、まだ4分かかります!

$> time npm install 
real 4m17.427s 
user 0m0.170s 
sys  0m0.290s 

私は継続的インテグレーションのための私のいつものベストプラクティスに従っている場合、私は自然のままのSCMリポジトリから開始し、ビルドを実行します。これは、CIビルドが新しくnpm installを実行し、4分かかることがあることを意味します。

私のビルド時間の割合です。私はビルドがずっと時間がかかることに不満を持っています。


代替方法は、ビルド間にnode_modulesを置くことです。しかし、結果としてビルドが不安定になるという問題がありました。

package.jsonから依存関係を削除しても、node_modulesから単純なnpm installに削除されません。私はまずnpm pruneでこれを回避することができます。

ここでベストプラクティスとは何でしょうか?

+0

あなたはどのバージョンのnpmを使用していますか? npm 5は[ローカルパッケージキャッシュ](https://docs.npmjs.com/cli/cache)を保持します。 – msanford

答えて

1

新しいパッケージをインストールする必要があることを考慮すると、インストールを呼び出す以外に選択肢はありません。原始的には、私は「依存関係管理」プロセスではなく「構築」プロセスに言及していると強く信じています。

なぜ異なるのですか?より明確にするための例を見てみましょう。開発者として

、あなたが最初にあなたの仕事を開始するとき、あなたはコードに有効になります ソフトウェア「をインストール」しなければなりません。これは通常1回行われます。 その後、コーディングを開始できます。後では、コードが生成する各機能の値を生成する際に、 "ビルド"部分 があります。 から、削除、追加、または更新することで、ツールリストを更新することができます。

この例では、コーディングを開始する前に仕事に着く毎日あなたのツールをインストールするのは地獄です。

アーティファクトを生成することを意味するビルドプロセス(たとえばJarなど)が依存関係のインストールプロセスから切り離されていることを確認することをお勧めします。つまり、一度インストールすれば、問題なく建物を進めることができます。あなたは何が造られるのかは言及していませんが、残忍なことは確かに残りを世話することができます。

したがって、私は枝刈りとインストールは良い戦略だと考えています。あなたは拳の時間を心配するべきではありません。それをコールドスタートと考えてください。パイプラインとして連携して動作するサブコンポーネントで実装されたシステムには、この「問題」があります。たとえば車に乗る。それはあなたが1時間後にそれを運転するようにそれを始めるときに燃料効率的ではありません。

0

依存関係を持つドッカーコンテナを構築するために毎日のジョブをスケジュールします。最新のコンテナでCIジョブを実行します。 CIジョブの構築をアーチファクトします。

0

あなたがローカルマシンまたはローカルネットワーク内のオフラインnpmパッケージをインストールする必要があり、あなたはここにいくつかのヒントを見つけることができます=>Offline installation of npm packages

0

あなたの全体のnode_modulesフォルダをシンボリックリンクnpm linkかさえを使用して考えがありますか? 少なくともnpmリンクがあなたのdev依存関係のために使用されています。これは、通常、サーバー上の制御バージョンを必要とします。これは物事を少し速くするはずです。

関連する問題