2

私はAMDとの連携を強化しようとしていますが、jQueryソースで、まったく理解できない何かに出くわしました。

ここにセクションがあります(ファイルの終わりの直前にあります):

if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
    define( "jquery", [], function () { return jQuery; } );
}

私が見ることができることから、AMDの主要なポイントの1つは、グローバルスコープをクリーンに保つことです。それでも、jQueryはそれ自体への参照をモジュールとして返すことを選択しますが、それでもグローバル空間に感染します。

「jQuery.noConflict();」を追加すると、私には思えます。リターンの直前にこれが解決され、オブジェクトがモジュールとして返されます。

RequireJSにはjQuery専用の特別なファイルがいくつかあることは知っていますが、1.7以降で必要かどうかはわかりません。

私の質問は2つの部分です:

1)この決定がなされた理由を誰かが知っていますか?

2)このアプローチはアップグレードに適していませんが、RequireJSとjQueryの標準バージョンを利用するより洗練されたソリューションに精通している人はいますか?

4

1 に答える 1

3

投稿した直後に、別のファイルでプロキシできることに気づきました。

//main.js
require.config({
    paths : {
    jquery : 'my/libs/jquery-1.7.1.min',
    jQuery : 'my/src/jquery'
}

//my/src/jquery.js

define([
        'jquery'
    ],
    function($) {
        $.noConflict(true);

        return $;
    }
);

プロキシ内の完全修飾された場所を参照するだけでなく、メインファイルの「jquery」エイリアスを使用する理由は、このエイリアスに依存するBackboneのAMD対応ブランチを使用しているためです。

https://github.com/jrburke/backbone/blob/2b0cfb4282f071cffb14a9573d703da6acc5febd/backbone.js

作成者は、Document Cloudによっていくつかのコミットを受け入れており、この変更も組み込まれることを望んでいます。

これに欠陥があるかどうか、またはテストされたAMDの戦いからどのような追加の答えがあるかを確認することは興味深いでしょう。

于 2012-01-07T06:45:41.710 に答える