1.1 RequireJSは、それ自体の2つのインスタンスをグローバルスコープにrequire
登録しますrequirejs
。実際には、1つの理由で、スコープまたは実装が異なるrequire
別のインスタンスでオーバーライドされた場合でも、通常は常にグローバルになります。この分離は、現在使用しているモジュールに関連するリソースを消費することを計画している場合に重要です。require
requirejs
// contents of 'a/b/c.js' module file
define(['require'], function(require){
// "local scope" require call
// resolves to 'a/b/d.js' file
require(['./d'], function(d){})
// "global scope" require call
// resolves to 'd.js' file
requirejs(['./d'], function(d){})
})
ローカルrequireを要求することは、define呼び出しでのみ意味があることに注意してください。define
呼び出しは「モジュール」とそのIDを確立するものです。上記は、この名前付き定義と同等です。
// contents of whatever file
define('a/b/c', ['require'], function(require){
// "local scope" require call
// resolves to 'a/b/d.js' file
require(['./d'], function(d){})
// "global scope" require call
// resolves to 'd.js' file
requirejs(['./d'], function(d){})
})
Jamesがそこに入れたもう1つの秘密の理由は、彼のビルドツールがrequire呼び出しを見つけるためにその特定の文字列を探すため、ローカルスコープでのrequirejs
使用を強制するためです。これを行うと、予期したものではないため、突然依存関係ツリーをたどることができなくなります。require
require
r.js
myLocalRequire
r.js
// contents of 'a/b/c.js' module file
define(['require'], function(myLocalRequire){
// "local scope" require call
// resolves to 'a/b/d.js' file
myLocalRequire(['./d'], function(d){})
// "global scope" require call
// resolves to 'd.js' file
require(['./d'], function(d){})
})
1.2RequireJSは同期読み込みをまったく行いません。「同期しなければならない!」と思う唯一の場所。--CommonJSスタイルの呼び出しはvar a = require('a')
まだそうではないようです。リソースをキャッシュからヤンクします。つまり、同期をロードすることはありません。
1.3バンドルされているRequireJS+jQueryを使用しないでください。それはすでに巨大なjQueryをより巨大にし、ブラウザのキャッシュを妨害します。(CDNからキャッシュされたjQueryを使用する代わりに、ユーザーに同じjQueryを再度ダウンロードするように強制します-100kのゴミ箱)。
代わりにこれを参照してください:RequireJSでjQueryをロードせずに依存関係としてjQueryを使用しますか?
2.0しないでください。個別の構成はトラップです。アプリの「構築」を開始したら、喜んで入力するのは地獄です。名前付き定義グループまたはメインモジュールが相対リソースをロードする「パッケージ」のいずれかとして表現できない、別の正常な構成の例を1つ挙げてください。
RequireJS構成に含まれている必要があるのは、「baseUrl」と2〜5個のグローバルに使用される「パス」の定義だけです。それでおしまい。