問題
かつて、大規模プロジェクトのリライト中に、Webアプリケーションのさまざまなバージョンのhtmlテンプレートをカスタマイズするメカニズムを改善する必要がありました。 古いバージョンでは、カスタマイズは次のようになりました。
{{if app.version==versions.main}} {{else if app.version==versions.custom1}} {{else if app.version==versions.custom2}} {{endif}}
そして、そのような麺でプロジェクト全体が浸透しました。 このようなコードを維持および変更することは難しく、積極的に使用すると、テンプレートは理解できない混乱に変わり、個々のブロックを表示するビジネスロジックが異なるバージョンのカスタマイズと絡み合います。
依存性注入を使用したアプリケーションのバージョン管理の便利な方法に慣れたため、バージョンに応じて異なるインターフェイス実装を使用する場合、XSLTのようなHTMLファイルのバージョン管理用の自転車
grunt-html-inheritanceを発明することにしました。 基本的なhtmlファイルの一部を小さなパッチで置き換えることができます。
プロジェクトを書き換えるとき、AngularJSがフレームワークとして選択されたため、アプリケーションのレイアウトは一連のhtmlファイルとして保存され、必要に応じてロードされます。これにより、これらのファイルを構築するシステムをアプリケーションの異なるバージョン用にカスタマイズして簡単に実装できます。
例
HTMLファイル「myfile.html」に次のレイアウトがあることを想像してみましょう。
<div> Blah blah blah <div>Main version</div> </div>
また、アプリケーションのさまざまなバージョンでよくあることですが、バージョン「myversion」では、「Main version」というテキストではなく、「My version」というテキストが表示される必要がありました。 html-inheritanceでこれを行うには、2つの簡単な手順を実行する必要があります。
1.「bl-」で始まる属性をタグ付けするタグに追加します。
<div> Blah blah blah <div bl-mytag>Main version</div> </div>
2.親ファイル用のパッチを含むファイル「myfile.myversion.html」を作成します。
<div bl-mytag="replace">Custom version</div>
それだけです! プロジェクトのビルド中、すべてのhtmlファイルはバージョンごとに指定されたフォルダーにきちんと折りたたまれます。
dist
|
メイン/
myfile.html
myversion /
myfile.html
これで、バージョンに応じてhtmlファイルをロードする場所をアプリケーションに指示するだけで十分で、すべてが単独で機能します!
設置
grunt-html-inheritanceをプロジェクトに追加するには、コマンドでnpmモジュールをインストールする必要があります
npm install grunt-html-inheritance
またはpackage.jsonに依存関係を追加し、コマンドでGruntfile.jsにタスクをロードします
grunt.loadNpmTasks('grunt-html-inheritance');
次のようにタスクを構成します。
grunt.initConfig({ html_inheritance: { main: { files: { src: "**.html"
AngularJSアプリケーションでは、HTMLファイルのバージョンを簡単に切り替えるための重要な条件は、ディレクティブとルーティングでこれらのパスをハードコーディングする代わりに、ヘルパーを使用してテンプレートファイルへのパスを構築することです。
メリット
そのようなカスタマイズシステムの最も興味深い利点は、htmlファイルをコンパイルせずにプロジェクトのメインバージョンを使用できることです。bl属性はブラウザがソースファイルを表示するのを妨げないためです。 また、この方法を使用するには、テンプレートエンジンの新しい構文を学ぶ必要はありません。すべてのロジックは、すべての開発者に馴染みのある通常のhtml属性を使用して実装されます。
使用する
上記の例で説明したパッチのベースタグを置き換えることに加えて、次のモードも利用できます。
- 削除 -パッチの親要素を削除します
- 挿入 -要素のパッチに挿入しますが、要素のメインバージョンには挿入しません
- 属性の変更 - 属性の削除と親要素への追加、クラスの削除と追加。
完全なドキュメントは
、パッケージ
ページまたはgithub
リポジトリで入手でき
ます 。 モジュールはテストでカバーされており、さらなる改善が必要です。 開発を手伝って、プルリクエストを送信してください。