0

requirejs.orgのその他のモジュール ノート。次のようなモジュールを書くことができます:

define(["require", "./relative/name"], function(require) {
    var mod = require("./relative/name");
});

また:

define(function(require) {
    var mod = require("./relative/name");
});

しかし、なぜ私はこのように書くことができないのですか:

define(["./relative/name"], function(require) {
    var mod = require("./relative/name");
});
4

1 に答える 1

1

最初のパラメーターが配列として指定されている場合、コールバックが実行される前にロードするモジュールのリストが含まれます。コールバック関数のパラメーターは、それらのモジュールへの参照を保持します。

最初の例を見てください: ここでは 2 つのモジュールがロードされrequire./relative/nameいます。コールバックは、パラメータを介して最初のものを受け取りますrequire。2 番目は引数に渡されますが、名前付き引数はありません。ただし、既にロードされているvar mod = require("./relative/name");ため、コールバック内で参照を取得するために使用できます。1

2番目の例については、リストしたリンクがこれを示しています

このフォームは Function.prototype.toString() を使用して require() 呼び出しを見つけ、「require」とともに依存配列に追加するため、コードは相対パスで正しく機能します。

つまり、require.js は関数を解析して依存関係を探し、最初の例のように配列を作成します。

ただし、最後の(機能しない)例では、両方を混在させようとしています。しかし、require.js の観点からは次のよう./relative/nameになりますrequire。関数内で、今度は という名前で、同じモジュールへの別の参照を取得しようとしますmod。そのため、require.js の場合はすべて問題ないように見えますが、(誤って) 予想されるように、両方ではなく 1 つのモジュールへの参照を取得するだけです。


1を使用した同期モジュールのロードvar mod = require("./relative/name");は、モジュールが以前に他の呼び出しによってロードされた場合にのみ機能します (必ずしも現在のモジュールによってではありません)。

于 2013-09-03T07:19:34.353 に答える