diff options
author | Michał Gołębiowski-Owczarek <m.goleb@gmail.com> | 2023-07-10 19:14:08 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-10 19:14:08 +0200 |
commit | 8be4c0e4f89d6c8f780e5937a0534921d8c7815e (patch) | |
tree | 55d87bcc040dfea54ec5c77ba86d942aa9526916 /src | |
parent | 65b85031fb5688361c077bc04e641e4b502671e1 (diff) | |
download | jquery-8be4c0e4f89d6c8f780e5937a0534921d8c7815e.tar.gz jquery-8be4c0e4f89d6c8f780e5937a0534921d8c7815e.zip |
Build: Add `exports` to package.json, export slim & esm builds
Summary of the changes:
* define the `exports` field in `package.json`; `jQuery` & `$` are also
exported as named exports in ESM builds now
* declare `"type": "module"` globally except for the `build` folder
* add the `--esm` option to `grunt custom`, generating jQuery as an ECMAScript
module into the `dist-module` folder
* expand `node_smoke_tests` to test the slim & ESM builds and their various
combinations; also, test both jQuery loaded via a path to the file as well
as from module specifiers that should be parsed via the `exports` feature
* add details about ESM usage to the release package README
* run `compare_size` on all built minified files; don't run it anymore on
unminified files where they don't provide lots of value
* remove the remove_map_comment task; SWC doesn't insert the
`//# sourceMappingURL=` pragma by default so there's nothing to strip
Fixes gh-4592
Closes gh-5255
Diffstat (limited to 'src')
-rw-r--r-- | src/.eslintrc.json | 24 | ||||
-rw-r--r-- | src/wrapper-esm.js | 41 | ||||
-rw-r--r-- | src/wrapper.js | 1 |
3 files changed, 66 insertions, 0 deletions
diff --git a/src/.eslintrc.json b/src/.eslintrc.json index f1b596dff..c2b08fb93 100644 --- a/src/.eslintrc.json +++ b/src/.eslintrc.json @@ -58,6 +58,30 @@ }, { + "files": "wrapper-esm.js", + "parserOptions": { + "ecmaVersion": 2015, + "sourceType": "module" + }, + "globals": { + "jQuery": false + }, + "rules": { + "no-unused-vars": "off", + "indent": [ "error", "tab", { + // Unlike other codes, "wrapper.js" is implemented in UMD. + // So it required a specific exception for jQuery's UMD + // Code Style. This makes that indentation check is not + // performed for 1 depth of outer FunctionExpressions + "ignoredNodes": [ + "Program > FunctionDeclaration > *" + ] + } ], + "import/no-unused-modules": "off" + } + }, + + { "files": "exports/amd.js", "globals": { "define": false diff --git a/src/wrapper-esm.js b/src/wrapper-esm.js new file mode 100644 index 000000000..00ff2995c --- /dev/null +++ b/src/wrapper-esm.js @@ -0,0 +1,41 @@ +/*! + * jQuery JavaScript Library v@VERSION + * https://jquery.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: @DATE + */ +// For ECMAScript module environments where a proper `window` +// is present, execute the factory and get jQuery. +// For environments that do not have a `window` with a `document` +// (such as Node.js), expose a factory as module.exports. +// This accentuates the need for the creation of a real `window`. +// e.g. var jQuery = require("jquery")(window); +// See ticket trac-14549 for more info. +var jQueryOrJQueryFactory = typeof window !== "undefined" && window.document ? + jQueryFactory( window, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return jQueryFactory( w ); + }; + +function jQueryFactory( window, noGlobal ) { + +// @CODE +// build.js inserts compiled jQuery here + +return jQuery; + +} + +export { + jQueryOrJQueryFactory as jQuery, + jQueryOrJQueryFactory as $ +}; + +export default jQueryOrJQueryFactory; diff --git a/src/wrapper.js b/src/wrapper.js index 8a3dc53e0..fa8240e1e 100644 --- a/src/wrapper.js +++ b/src/wrapper.js @@ -42,4 +42,5 @@ // build.js inserts compiled jQuery here return jQuery; + } ); |