From a6f474e699f95a90f95228bd525490151acc0451 Mon Sep 17 00:00:00 2001 From: Timmy Willison Date: Thu, 19 Dec 2013 15:00:06 -0500 Subject: [PATCH] Build: Add the ability to remove global exposure. Ref #14016 --- README.md | 1 + build/tasks/build.js | 7 +++++++ src/core.js | 18 ------------------ src/exports/global.js | 29 +++++++++++++++++++++++++++++ src/jquery.js | 8 +++----- 5 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 src/exports/global.js diff --git a/README.md b/README.md index 7cb89edce..ba18b77f9 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 07d2942f1..d4cdd1233 100644 --- a/build/tasks/build.js +++ b/build/tasks/build.js @@ -196,6 +196,13 @@ module.exports = function( grunt ) { excluded.splice( index, 1 ); } + // 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 994fd4c60..6afb97685 100644 --- a/src/core.js +++ b/src/core.js @@ -15,12 +15,6 @@ var // Use the correct document accordingly with window argument (sandbox) document = window.document, - // 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 ef8745c7b..46460fa96 100644 --- a/src/jquery.js +++ b/src/jquery.js @@ -27,12 +27,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; }); -- 2.39.5