2016-05-04 1 views
6

を設定するには:ウェブAPI - 利用ガルプタスク私の前の質問で説明したように、動的エンドポイント・アドレス

Asp.net web API 2 separation Of Web client and web server development

クライアントとサーバーの完全な分離を得るために、私が保持する変数を設定しますクライアント要求のエンドポイント。クライアント側が開発されると、要求はサーバー側の開発に依存せずにクライアント側を開発できるようにデフォルト値を返す「スタブサーバー」に送られます。そのスタブ・サーバーは実際のサーバー・ポートとは異なる1つのポート上で実行され、ブランチ・インテグレーションではサーバーとクライアント間の統合を実行すると、変数は実際のサーバー・ポートを保持します。

私は、Gulpのようなビルドツールが私を助けてくれることを知りました。

私はTfsソースコントロールを使用しています。

gulp.task('setEndPoint', function() { 
    var branchName = // How do I get it? 
    if (branchName == "Project.Testing") 
     endPoint = "localhost/2234" 
    if (branchName == "Project.Production") 
     endPoint = "localhost/2235" 
}); 

をタスクが実行されている現在のブランチを取得する方法があります:私が欲しいもの

は、たとえば、次のように機能しますタスクを書くのですか?代わりに、スクリプト内部でブランチをチェックするヘルパー

+0

私は混乱していると思います。あなたはこれ以上の背景や情報を与えることができますか?私の直感は "Gulpを使ってエンドポイントの変数を設定しているのはなぜですか?"組み込みの構成概念を使用しない理由はありますか?新しいMVC6プロジェクトタイプの古いサイトや設定可能な設定オプション(JSON、XMLなど)の場合、Web.configは機能します。 –

+0

多分、私の古い質問はより良い説明に役立ちます - http://stackoverflow.com/questions/36664393/asp-net-web-api-2-separation-of-web-client-and-web-server-development?noredirect= 1#comment60922872_36664393 –

答えて

2

ため

おかげで、何PRODビルド対DEVビルドを区別するために、引数を使用してについて。は、オブジェクトのプロパティにスクリプトに引数を結合する

var argv = require('yargs').argv; 
gulp.task('setEndPoint', function() { 
    if (argv.dev) 
     endPoint = "localhost/2234" 
    else 
     endPoint = "localhost/2235" 
}); 

yargs:

gulp build --bla 

は、あなたがあなたの中のタスクを飲み込むていることができます

あなたはそのためのyargsを使用することができます:

var argv = require('yargs').argv; 
if (argv.bla) { 
    // this line runs 
} 

これで、i引数なしでgulp buildと呼び出すと、devがtrue(argv.devは未定義)に設定されず、のプロダクトエンドポイントが選択されます。これはTFS上で、または開発ボックス上の実際のバックエンドに対して実行したいときに起こります。

バックエンドレス開発の場合、gulp build --devを呼び出して、devエンドポイントを選ぶことができます。

ご希望の場合は、argv.prodを使用し、TFSにgulp build --prodを設定し、その引数を渡すことはありませんスタブサーバーを使用しますすることができます。

+0

このアプローチでは、変更なしで異なる環境で構築するときにエンドポイントが正しく設定されますか?私は実際にyargsを理解していません、ドキュメントを読んだ後でも、簡単に私にそれを説明してくれることを願っています。 –

+0

もう少し明確にしようとしました。その考えは、gulpタスクの内部でブランチを調べる代わりに、使用するAPIエンドポイントを指定します。 –

+0

私はyargsの使い方をどのように示唆し、どのように役立つのかを理解しましたが、他のエンドポイントに切り替えるために変更を加える必要があります。私たちが今やっていることと同じように聞こえる。私たちは両方の偽のサーバーと実際のサーバーが同じポートに座っている、私たちは仮想ディレクトリを作成するときに切り替える。私はsimillaryを構築し、何も変更せずにエンドポイントを得ることができるようにしたかった –

2

Gulpは異なる環境で動作し、TFSは異なる環境で動作します。彼らがお互いの設定を見ることができるなら、私は非常に驚くだろう。しかし、実際の問題は、APIの正しいURL(または単にポート)を特定することです。私は、この問題を解決する最善の方法は、環境変数ファイルを使用することだと思います。

ここで、クライアントチームはクライアントブランチで開発しており、サーバーチームはサーバーブランチで開発しています。準備ができたら、両方のチームが変更をメインブランチにマージします。これで、プロダクションコードはメインブランチから実行されます。

考え方は、クライアントブランチとメインブランチにenv.jsファイルを追加することです。クライアントブランチのこのファイルに対する変更がメインブランチへのチェックインから除外されていることを確認してください(これはTFSでは非常に簡単です。ファイルを右クリックしてチェックインから除外してください)。このファイルには、環境変数(API url)が保持されます。あなたの角型クライアントは、実行のためにこのファイルから値を読み込みます。このようにして、開発、ステージング、およびプロダクション用に別々のenv.jsファイルを作成することができます。また、展開で変更するという頭痛に対処する必要もありません。

Hereは、これを達成する方法についての素晴らしい記事です。あなたが達成できる多くの点で大きな柔軟性を提供するので、私はこの経路をとることを強くお勧めします。 gulpは素晴らしいクライアントサイドビルドツールです。 minificationのような他のタスクのための、このような貪欲なアプローチは、アプリケーションをより良くするでしょう。

質問がある場合はお知らせください。

ありがとう、 Soma。

+0

なぜあなたはenv.jsをメインブランチから除外すべきだとお考えですか? –

+0

env.jsファイルは、開発、テスト、プロダクションなどの環境ごとに一意であるため、チェックインから除外する必要があります。ある環境(開発用に定義したURLはベータ版と異なる場合があります)から他の環境への変更を上書きしたくないため、そのファイルをチェックして別のコピーを保持しないようにしてください。 –

関連する問題