1. ホーム
  2. javascript

[解決済み] Requirejs なぜ、いつ shim config を使用するのか?

2023-01-19 11:06:11

質問

私は 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" フックは他の高度なことを行うことができます。あるいは、読み込んでいるライブラリのメソッドに、ちょっとだけパッチを当てたい場合などです。

さらに背景を説明します。