TypeScript、Backbone、Mustacheを使用してWebアプリを作成しています。依存関係の読み込みにRequirejsを使用したい。
また、AMDコンパイルオプションをオンにして、TypeScript用のWebEssentialsビジュアルスタジオプラグインを使用しています。これに精通していない人のために、外部モジュールをインポートすると、タイプスクリプトファイルがAMDモジュールにラップされます。例えば:
タイプスクリプトでは、次のモジュールをタイプ定義ファイルにインポートします。
export import Backbone = module("Backbone");
import mainTemplate = module("MainTemplate");
出力は次のようになります。
define(["require", "exports", "Backbone", "MainTemplate"], function(require, exports, __Backbone__, __mainTemplate__) {
//...code goes here ...
});
テンプレートについては、型定義ファイルで次のように宣言しました。
declare module "MainTemplate" { }
requirejsプラグインをサポートするには、モジュールを次のように宣言する必要があります。
declare module "text!MainTemplate.html" { }
モジュール名にプラグインやファイル拡張子を付けないようにしたいのですが。これにより、将来的にある程度の柔軟性が得られます。
次のマッピングが必要です。
require.config({
map: {
"MyModule": {
"MainTemplate": "text!MainTemplate.html"
}
}
}
これによりテキストプラグインが正常に呼び出されますが、プラグインは間違ったURLをロードします。テキストプラグインのソースコードをふるいにかけると、次のコードが原因であることがわかりました。
load: function (name, req, onLoad, config) {
...
url = req.toUrl(nonStripName),
//returns "scripts/**text!**MainTemplate.html**.html**"
...
}
モジュールに「MainTemplate.html」という名前を付けると、正常に機能しますが、拡張子をモジュール名から除外したいと思います。
プラグイン参照と重複する拡張機能を取り除くために、単純な正規表現の置換でテキストプラグインを変更しました。
これを処理するためのより良い方法はありますか?