Ответ 1
TL; DR;
В вашем случае это должно быть так же просто, как использовать;
$ = require('jquery/dist/jquery')(window); // v2.1.0-beta2
Это может быть очевидно; но вам придется использовать эту форму объявления (передать window
в результат require
) в каждом используемом вами модуле, а не только в одном/первом и т.д.
Non-TL; DR;
Для тех, кто хочет знать, почему интересный код в jQuery, который обрабатывает это,
(function( window, factory ) {
if ( typeof module === "object" && typeof module.exports === "object" ) {
// Expose a jQuery-making factory as module.exports in loaders that implement the Node
// module pattern (including browserify).
// This accentuates the need for a real window in the environment
// e.g. var jQuery = require("jquery")(window);
module.exports = function( w ) {
w = w || window;
if ( !w.document ) {
throw new Error("jQuery requires a window with a document");
}
return factory( w );
};
} else {
factory( window );
}
// Pass this, window may not be defined yet
}(this, function( window ) {
// All of jQuery gets defined here, and attached to the (locally named variable) "window".
}));
Обратите внимание на комментарии вверху, которые явно адресуют браузеру; в ситуациях, когда jQuery находится в среде CommonJs, вместо возврата jQuery
, как мы его знаем, он возвращает функцию, которая при передаче объекта (который должен быть window
) возвращает jQuery.
Чтобы еще больше запутать вопрос, этот код настройки снова изменился в последнем коммите, так что module.exports
определяется так;
module.exports = global.document ?
factory( global ) :
function( w ) {
if ( !w.document ) {
throw new Error( "jQuery requires a window with a document" );
}
return factory( w );
... такое, что если this
является объектом window
, когда jQuery является require()
'd, он вернет экземпляр jQuery, или, если он не вернет функцию factory, как раньше; поэтому, когда версия 2.1.0 будет выпущена, вам придется снова удалить вызов (window)
.