オプションでモジュールを定義して、それをコードで使用するかどうかを指定できるようにしたいと考えています。私が検討している特定の状況は、デバッグ/テスト環境でモック/スタブ モジュールをロードすることですが、ライブに移行するときではありません。次に例を示します。
html ファイルでは、js ファイルがオプションでロードされます (疑似コード):
//index.cshtml
...
<script src="/Scripts/lib/require.js"></script>
<script src="/Scripts/app/service_user.js"></script>
<script src="/Scripts/app/real_service.js"></script>
#if DEBUG
<script src="/Scripts/app/mock_service.js"></script>
#endif
上記では、real_service と mock_service の両方をデバッグ バージョンにロードする必要があります。
各モジュールは、requirejs を使用して定義されます。
//mock_service.js
define('mock_service', [],
function () {
...
});
//real_service.js
define('real_service', [],
function () {
...
});
次に、サービスを使用するときに、mock_service が定義されているかどうかを確認したいと思います。
//service_user.js
define(['require', 'real_service'],
function (require, real_service) {
if (require.isDefined('mock_service')) { // 'isDefined' is what I wish was available
var mock = require('mock_service');
mock.init(real_service);
}
...
});
したがって、私の概念的な「isDefined」関数は、指定された名前 (または名前?) が定義されているモジュールをチェックするだけです。次に、コードで定義されている場合は、それを要求して使用できます。そうでないなら、それもいい。
私にとって重要なことは、オプションのモジュールをロードしようとしないことです。私はrequireステートメントを試したりキャッチしたりすることができましたが、それはサーバーからそれをロードしようとする原因となり、私はそれを望んでいません。
別のオプションは、常にロードするスタブを定義することです。そのため、必要なモックが常に存在し、それが本物かどうかを問い合わせることができますが、それも無駄に思えます。
require.js に深く関わっていて、この機能が必要であることを発見し、実装のための戦略を練った人はいますか?
前もってありがとう、ロブ