1

require.js によって ('define' で) ロードされる 2 つのモジュールがあります。

  1. ds.test.js
  2. ds.js

ご想像のとおり、前者は後者をテストします。ds.test.js のプリアンブルは次のとおりです。いくつかのコンソール/ログを追加しました。

define(["ds", "test", "assert"], function (ds, test, assert) {
    console.log(arguments);
    // the rest is a 'pure' module -- 
    // no executable code outside of a returned object/map of methods

コンソール/ロギングからの出力は、私が期待するものです:[オブジェクト、オブジェクト、オブジェクト]

ds.js のプリアンブル (コンソール/ログ付き) は次のとおりです。

define(["ds"], function (ds) {
    console.log(arguments);
    // the rest is a 'pure' module

ただし、コンソール/ロギングからの出力は次のとおりです。[未定義]

前者 (ds.test.js) は ds を正常にロードできるのに、ds.js 自体はロードできないのはなぜですか? これにより、テストの 1 つが失敗します。ds によって返されるメソッドの 1 つがそれ自体のメソッド、つまり「ds.assoc()」を参照しているためです。興味深いことに、require.js の前に独自の依存関係マネージャーを使用していましたが、同じメソッドでテストが失敗することはありませんでした。ds.js はそれ自体を参照できました。

これは、いわゆる「循環依存」の問題でしょうか? ds.test.js は ds.js に依存しており、ds.js はそれ自体に依存しています。その場合、どうすれば問題を解決できますか?

価値のあることとして、ds.test.js が最初にロードされます。これは、「test.runner.js」によって「SUITE」という名前のグローバル変数として取得されます。そのプリアンブルは次のとおりです。

define(["test", SUITE], function (test, suite) {

次に、読み込まれるテスト スイート (このキャストでは ds.test.js) は、テスト対象のモジュール ("ds" など) を順番に読み込みます。

いくつかの最終的なコンテキストは、私がこのコードをこの数週間で継承したばかりであり、私が行っていることは、別のアプリケーションを独自の依存関係マネージャーから require.js に変換した既存の方法に基づいているということです。したがって、「なぜグローバル変数を使用しているのですか」などのコメントで狙撃する前に、それを考慮に入れるように求めていると思います。具体的な代替案があれば、それを楽しみにしています。

4

1 に答える 1