Grunt で開発および管理しているフロントエンド アセットを含む Web アプリがあります。その組織の大まかな考えは次のとおりです。
_app
_fonts
_img
_lib
_scss
_templates
FrontendApplication
Gruntfile.js
そのため、grunt watch を実行してファイルを追跡し、grunt-copy を使用して、結果のファイルをサーバーが提供する dist/DATE フォルダーにコピーします。お気に入り:
FrontendApplication/FrontendApplication/Assets/2014-06
このフォルダー内には、次のような最終的な静的ファイルがあります。
app
css
fonts
img
lib
index.html
現在、この同じコード ベースを使用しているさまざまなクライアントがいますが、フロントエンド アセットはわずかに異なります。たとえば、ロゴ イメージや、デフォルトのものをオーバーライドするための新しい css (companysname.css など) があります。そのため、カスタマイズされたバージョンのアプリをクライアント用の別のフォルダーに公開することを考えています。
FrontendApplication/FrontendApplication/Assets/CLIENTNAME
私の上司は、以下のような app.conf を提供しています。
[Domains]
default=2014-06
client1=client1
そして彼は、Grunt にこのファイルを読み取らせてから、どのフォルダーに公開するかを決定させるべきだと言っています。つまり、client1 が定義されている場合、カスタマイズされたアセットを client1/ フォルダーに公開します。それ以外の場合は、デフォルトの 2014-06/ になります。サーバーは該当する client1/ フォルダーを探し、それが見つからない場合は、既定の 2014-06/ フォルダーを参照して静的アセットを表示します。
だからここに私の質問があります:
- Grunt がディレクトリにあるファイルから情報を読み取って抽出し、それらをパラメーターとして構成ファイルに渡して、他のタスクで使用することは可能ですか? どのようにそれを行うのですか?
- 可能であれば、クライアントごとに異なるバージョンのフロントエンド アセットを維持するにはどうすればよいですか?
私の見方では、これができることです:
まず、Git ブランチmasterの下で、gruntfile に宛先フォルダーを指す変数を次のように設定します。
var globalConfig = {
//valueWePluckedFromAppConf: '2014-06',
destinationFolder: 'FrontendApplication/FrontendApplication/Assets/' + valueWePluckedFromAppConf
};
そして、 client1などの client ブランチの下で、変数が別の宛先フォルダーを指すようにします。もちろん、このブランチの下では、scss ファイルと画像、および場合によってはスクリプトが異なる場合があります。
var globalConfig = {
//valueWePluckedFromAppConf: 'client1',
destinationFolder: 'FrontendApplication/FrontendApplication/Assets/' + valueWePluckedFromAppConf
};
そうすれば、Git が宛先を処理します。master ブランチの場合は 2014-06/ に公開し、client ブランチの場合は client1/ に切り替えます。等々。したがって、Grunt は何らかの方法で上記の app.conf を読み取り、宛先フォルダーの値を取得して、そこに公開します。
もちろん、私が目にする 1 つの問題は、ファイルにアクセスするためにブランチを切り替える必要があることです。おそらく、2014-06/ と client1/ の両方をサーバーにプッシュするには、ブランチを切り替える必要があります。新しいメジャー バージョンができたら、app.conf を変更します。Grunt は、新しいブランチ/タグの下で、たとえば 2015-01/ にプッシュします。
上記は、上司の要求に基づいて私が思いついた非常に大雑把で曖昧な解決策です。しかし、率直に言って、彼も私も上記を達成する方法を知るほど Grunt に精通しておらず、個人的には (フローの自動化は言うまでもなく) フロントエンド アセットのバージョン管理に取り組んだことがないため、これを投稿しています。
事前に感謝します。