CommonJSとCommonJS-like仕様対応(1~38)

3677 ワード

CommonJSはサーバ側モジュールの仕様、Node.jsはこの規範を採用した.
CommonJS仕様によると、個別のファイルはモジュールです.各モジュールは、globalオブジェクトのプロパティとして定義されていない限り、個別の役割ドメインです.すなわち、モジュール内で定義された変数は、globalオブジェクトのプロパティとして定義されていない限り、他のモジュールに読み込めません.
jqueryがnodeで使用する場合は、次の2つの問題を解決します.
1.module.exports方式導入(CommonJSモジュール導入)
2.サーバ環境なのでwindow変数はありません.
/*!

 * jQuery JavaScript Library v2.1.1

 * http://jquery.com/

 *

 * Includes Sizzle.js

 * http://sizzlejs.com/

 *

 * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors

 * Released under the MIT license

 * http://jquery.org/license

 *

 * Date: 2014-05-01T17:11Z

 */



(function( global, factory ) {



    if ( typeof module === "object" && typeof module.exports === "object" ) {

        // For CommonJS and CommonJS-like environments where a proper window is present,

        // execute the factory and get jQuery

        // For environments that do not inherently posses a window with a document

        // (such as Node.js), expose a jQuery-making factory as module.exports

        // This accentuates the need for the creation of a real window

        // e.g. var jQuery = require("jquery")(window);

        // See ticket #14549 for more info

        module.exports = global.document ?

            factory( global, true ) :

            function( w ) {if ( !w.document ) {

                    throw new Error( "jQuery requires a window with a document" );

                }

                return factory( w );

            };

    } else {

        factory( global );

    }



// Pass this if window is not defined yet

}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {

    //factory code....

}))

コードによると、jqueryは、CommonJS仕様(typeof module====“object”&&typeof module.exports====“object”)ではなく、ライブラリ関数を呼び出すかどうかを判断する即時呼び出し関数を採用し、documentがあるかどうかを判断する(ここまで行くとwindowがないかどうかを判断し、windowモードがないかを開く)、ライブラリ関数を呼び出す場合があります.
なしはwindowへの送信を待つ匿名関数を返します.