[解決済み] Requirejs なぜ、いつ shim config を使用するのか?
質問
私は requirejs の文書はここから API
requirejs.config({
shim: {
'backbone': {
//These script dependencies should be loaded before loading
//backbone.js
deps: ['underscore', 'jquery'],
//Once loaded, use the global 'Backbone' as the
//module value.
exports: 'Backbone'
},
'underscore': {
exports: '_'
},
'foo': {
deps: ['bar'],
exports: 'Foo',
init: function (bar) {
//Using a function allows you to call noConflict for
//libraries that support it, and do other cleanup.
//However, plugins for those libraries may still want
//a global. "this" for the function will be the global
//object. The dependencies will be passed in as
//function arguments. If this function returns a value,
//then that value is used as the module export value
//instead of the object found via the 'exports' string.
return this.Foo.noConflict();
}
}
}
});
が表示されません。 シム の部分が表示されません。 なぜ私はshimを使用する必要があり、私はどのように設定する必要があり、私はいくつかのより多くの明確な得ることができます。
なぜ、どのような場合に shim を使用する必要があるのか、どなたか例を挙げて説明していただけませんか。 ありがとうございます。
どのように解決するのですか?
shimの主な用途は、AMDをサポートしていないライブラリで、その依存関係を管理する必要がある場合です。例えば、上記のBackboneとUnderscoreの例では、BackboneがUnderscoreを必要とすることを知っているので、コードをこのように書いたとします。
require(['underscore', 'backbone']
, function( Underscore, Backbone ) {
// do something with Backbone
}
RequireJSはUnderscoreとBackboneの両方に対して非同期リクエストを開始しますが、あなたは どちらが先に帰ってくるかわからない ということで、BackboneはUnderscoreがロードされる前にUnderscoreで何かをしようとする可能性があります。
NOTEです。 このunderscore/backboneの例は、これらのライブラリが両方ともAMDをサポートする前に書かれたものです。しかし、この原則は AMD をサポートしていない今日のどのようなライブラリにも当てはまります。
例えば、ライブラリは通常2つの異なるものをグローバルな名前空間にエクスポートしますが、それらを単一の名前空間の下で再定義したい場合など、 "init" フックは他の高度なことを行うことができます。あるいは、読み込んでいるライブラリのメソッドに、ちょっとだけパッチを当てたい場合などです。
さらに背景を説明します。
- RequireJS 2.0にアップグレードする。 は、注文プラグインが過去にこれを解決しようとした方法について、いくつかの履歴を提供します。
- の "非モジュールの読み込み" セクションを参照してください。 Aaron Hardy によるこの記事 を参照してください。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] JavaScriptで二重引用符と単一引用符はいつ使うべきですか?
-
[解決済み] varキーワードの目的と、どのような場合に使用する(または省略する)べきですか?
-
[解決済み] CommonJSとAMDとRequireJSの関係?
-
[解決済み] JavaScriptのtoString()関数をオーバーライドして、デバッグ用に意味のある出力を提供することは可能でしょうか?
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
-
[解決済み] JavaScriptの文字列プリミティブとStringオブジェクトの違いは何ですか?