diff --git a/README.md b/README.md index 180d22a6d..e85c802be 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ Some example modules that can be excluded are: - **offset**: The `.offset()`, `.position()`, `.offsetParent()`, `.scrollLeft()`, and `.scrollTop()` methods. - **wrap**: The `.wrap()`, `.wrapAll()`, `.wrapInner()`, and `.unwrap()` methods. - **exports/amd**: Exclude the AMD definition. +- **exports/global**: Exclude the attachment of global jQuery variables ($ and jQuery) to the window. - **core/ready**: Exclude the ready module if you place your scripts at the end of the body. Any ready callbacks bound with `jQuery()` will simply be called immediately. However, `jQuery(document).ready()` will not be a function and `.on("ready", ...)` or similar will not be triggered. - **deferred**: Exclude jQuery.Deferred. This also removes jQuery.Callbacks. *Note* that modules that depend on jQuery.Deferred(AJAX, effects, core/ready) will not be removed and will still expect jQuery.Deferred to be there. Include your own jQuery.Deferred implementation or exclude those modules as well (`grunt custom:-deferred,-ajax,-effects,-core/ready`). diff --git a/build/tasks/build.js b/build/tasks/build.js index aacb5abd8..7b3f69131 100644 --- a/build/tasks/build.js +++ b/build/tasks/build.js @@ -87,7 +87,7 @@ module.exports = function( grunt ) { "build", "Concatenate source, remove sub AMD definitions, (include/exclude modules with +/- flags), embed date/version", function() { - var flag, + var flag, index, done = this.async(), flags = this.flags, optIn = flags[ "*" ], @@ -186,6 +186,13 @@ module.exports = function( grunt ) { excluder( flag ); } + // Replace exports/global with a noop noConflict + if ( (index = excluded.indexOf( "exports/global" )) > -1 ) { + config.rawText[ "exports/global" ] = "define(['../core']," + + "function( jQuery ) {\njQuery.noConflict = function() {};\n});"; + excluded.splice( index, 1 ); + } + grunt.verbose.writeflags( excluded, "Excluded" ); grunt.verbose.writeflags( included, "Included" ); diff --git a/src/core.js b/src/core.js index 11ab78b18..9b87b00b1 100644 --- a/src/core.js +++ b/src/core.js @@ -12,12 +12,6 @@ define([ ], function( deletedIds, slice, concat, push, indexOf, class2type, toString, hasOwn, trim, support ) { var - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - version = "@VERSION", // Define a local copy of jQuery @@ -202,18 +196,6 @@ jQuery.extend({ noop: function() {}, - noConflict: function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). diff --git a/src/exports/global.js b/src/exports/global.js new file mode 100644 index 000000000..ace2cdddd --- /dev/null +++ b/src/exports/global.js @@ -0,0 +1,29 @@ +define([ + "../core" +], function( jQuery ) { + +var + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + +jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; +}; + +// Expose jQuery and $ identifiers, even in +// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) +// and CommonJS for browser emulators (#13566) +window.jQuery = window.$ = jQuery; + +}); diff --git a/src/jquery.js b/src/jquery.js index 5c3d27ff8..ac5ea9fd7 100644 --- a/src/jquery.js +++ b/src/jquery.js @@ -28,12 +28,10 @@ define([ "./offset", "./dimensions", "./deprecated", - "./exports/amd" + "./exports/amd", + "./exports/global" ], function( jQuery ) { -// Expose jQuery and $ identifiers, even in -// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) -// and CommonJS for browser emulators (#13566) -return (window.jQuery = window.$ = jQuery); +return jQuery; });