aboutsummaryrefslogtreecommitdiffstats
path: root/Gruntfile.js
diff options
context:
space:
mode:
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>2023-07-10 19:14:08 +0200
committerGitHub <noreply@github.com>2023-07-10 19:14:08 +0200
commit8be4c0e4f89d6c8f780e5937a0534921d8c7815e (patch)
tree55d87bcc040dfea54ec5c77ba86d942aa9526916 /Gruntfile.js
parent65b85031fb5688361c077bc04e641e4b502671e1 (diff)
downloadjquery-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 'Gruntfile.js')
-rw-r--r--Gruntfile.js439
1 files changed, 0 insertions, 439 deletions
diff --git a/Gruntfile.js b/Gruntfile.js
deleted file mode 100644
index 11260d350..000000000
--- a/Gruntfile.js
+++ /dev/null
@@ -1,439 +0,0 @@
-"use strict";
-
-module.exports = function( grunt ) {
- function readOptionalJSON( filepath ) {
- const stripJSONComments = require( "strip-json-comments" );
- let data = {};
- try {
- data = JSON.parse( stripJSONComments(
- fs.readFileSync( filepath, { encoding: "utf8" } )
- ) );
- } catch ( e ) {}
- return data;
- }
-
- const fs = require( "fs" );
- const gzip = require( "gzip-js" );
- const nodeV14OrNewer = !/^v1[0-3]\./.test( process.version );
- const nodeV17OrNewer = !/^v1[0-6]\./.test( process.version );
- const customBrowsers = process.env.BROWSERS && process.env.BROWSERS.split( "," );
-
- // Support: Node.js <14
- // Skip running tasks that dropped support for Node.js 10 or 12
- // in this Node version.
- function runIfNewNode( task ) {
- return nodeV14OrNewer ? task : "print_old_node_message:" + task;
- }
-
- if ( nodeV14OrNewer ) {
- const playwright = require( "playwright-webkit" );
- process.env.WEBKIT_HEADLESS_BIN = playwright.webkit.executablePath();
- }
-
- if ( !grunt.option( "filename" ) ) {
- grunt.option( "filename", "jquery.js" );
- }
-
- grunt.initConfig( {
- pkg: grunt.file.readJSON( "package.json" ),
- dst: readOptionalJSON( "dist/.destination.json" ),
- compare_size: {
- files: [ "dist/jquery.js", "dist/jquery.min.js" ],
- options: {
- compress: {
- gz: function( contents ) {
- return gzip.zip( contents, {} ).length;
- }
- },
- cache: "build/.sizecache.json"
- }
- },
- babel: {
- options: {
- sourceMap: "inline",
- retainLines: true,
- plugins: [ "@babel/transform-for-of" ]
- },
- tests: {
- files: {
- "test/data/core/jquery-iterability-transpiled.js":
- "test/data/core/jquery-iterability-transpiled-es6.js"
- }
- }
- },
- build: {
- all: {
- dest: "dist/jquery.js",
- minimum: [
- "core"
- ],
-
- // Exclude specified modules if the module matching the key is removed
- removeWith: {
- ajax: [ "manipulation/_evalUrl", "deprecated/ajax-event-alias" ],
- callbacks: [ "deferred" ],
- css: [ "effects", "dimensions", "offset" ],
- "css/showHide": [ "effects" ],
- deferred: {
- remove: [ "ajax", "effects", "queue", "core/ready" ],
- include: [ "core/ready-no-deferred" ]
- },
- event: [ "deprecated/ajax-event-alias", "deprecated/event" ],
- selector: [ "css/hiddenVisibleSelectors", "effects/animatedSelector" ]
- }
- }
- },
- npmcopy: {
- all: {
- options: {
- destPrefix: "external"
- },
- files: {
- "bootstrap/bootstrap.css": "bootstrap/dist/css/bootstrap.css",
- "bootstrap/bootstrap.min.css": "bootstrap/dist/css/bootstrap.min.css",
- "bootstrap/bootstrap.min.css.map": "bootstrap/dist/css/bootstrap.min.css.map",
-
- "core-js-bundle/core-js-bundle.js": "core-js-bundle/minified.js",
- "core-js-bundle/LICENSE": "core-js-bundle/LICENSE",
-
- "npo/npo.js": "native-promise-only/lib/npo.src.js",
-
- "qunit/qunit.js": "qunit/qunit/qunit.js",
- "qunit/qunit.css": "qunit/qunit/qunit.css",
- "qunit/LICENSE.txt": "qunit/LICENSE.txt",
-
- "requirejs/require.js": "requirejs/require.js",
-
- "sinon/sinon.js": "sinon/pkg/sinon.js",
- "sinon/LICENSE.txt": "sinon/LICENSE"
- }
- }
- },
- jsonlint: {
- pkg: {
- src: [ "package.json" ]
- }
- },
- eslint: {
- options: {
- maxWarnings: 0
- },
-
- // We have to explicitly declare "src" property otherwise "newer"
- // task wouldn't work properly :/
- dist: {
- src: [ "dist/jquery.js", "dist/jquery.min.js" ]
- },
- dev: {
- src: [
- "src/**/*.js",
- "Gruntfile.js",
- "test/**/*.js",
- "build/**/*.js",
-
- // Ignore files from .eslintignore
- // See https://github.com/sindresorhus/grunt-eslint/issues/119
- ...fs
- .readFileSync( `${ __dirname }/.eslintignore`, "utf-8" )
- .split( "\n" )
- .filter( filePath => filePath )
- .map( filePath => filePath[ 0 ] === "!" ?
- filePath.slice( 1 ) :
- `!${ filePath }`
- ),
-
- // Explicitly ignore `dist/` as it could be unignored by
- // the above `.eslintignore` parsing.
- "!dist/**/*.js"
- ]
- }
- },
- testswarm: {
- tests: [
-
- // A special module with basic tests, meant for not fully
- // supported environments like jsdom. We run it everywhere,
- // though, to make sure tests are not broken.
- "basic",
-
- "ajax",
- "animation",
- "attributes",
- "callbacks",
- "core",
- "css",
- "data",
- "deferred",
- "deprecated",
- "dimensions",
- "effects",
- "event",
- "manipulation",
- "offset",
- "queue",
- "selector",
- "serialize",
- "support",
- "traversing",
- "tween"
- ]
- },
- karma: {
- options: {
- customContextFile: "test/karma.context.html",
- customDebugFile: "test/karma.debug.html",
- customLaunchers: {
- ChromeHeadlessNoSandbox: {
- base: "ChromeHeadless",
- flags: [ "--no-sandbox" ]
- }
- },
- frameworks: [ "qunit" ],
- middleware: [ "mockserver" ],
- plugins: [
- "karma-*",
- {
- "middleware:mockserver": [
- "factory",
- require( "./test/middleware-mockserver.js" )
- ]
- }
- ],
- client: {
- qunit: {
-
- // We're running `QUnit.start()` ourselves via `loadTests()`
- // in test/jquery.js
- autostart: false
- }
- },
- files: [
- "test/data/jquery-1.9.1.js",
- "external/sinon/sinon.js",
- "external/npo/npo.js",
- "external/requirejs/require.js",
- "test/data/testinit.js",
-
- "test/jquery.js",
-
- {
- pattern: "dist/jquery.*",
- included: false,
- served: true,
- nocache: true
- },
- {
- pattern: "src/**",
- type: "module",
- included: false,
- served: true,
- nocache: true
- },
- { pattern: "external/**", included: false, served: true },
- {
- pattern: "test/**/*.@(js|css|jpg|html|xml|svg)",
- included: false,
- served: true,
- nocache: true
- }
- ],
- reporters: [ "dots" ],
- autoWatch: false,
-
- // 2 minutes; has to be longer than QUnit.config.testTimeout
- browserNoActivityTimeout: 120e3,
-
- concurrency: 3,
- captureTimeout: 20 * 1000,
- singleRun: true
- },
- main: {
- browsers: customBrowsers ||
- [ "ChromeHeadless", "FirefoxHeadless", "WebkitHeadless" ]
- },
- esmodules: {
- browsers: customBrowsers || [ "ChromeHeadless" ],
- options: {
- client: {
- qunit: {
-
- // We're running `QUnit.start()` ourselves via `loadTests()`
- // in test/jquery.js
- autostart: false,
-
- esmodules: true
- }
- }
- }
- },
-
- jsdom: {
- options: {
- files: [
- "test/data/jquery-1.9.1.js",
- "test/data/testinit-jsdom.js",
-
- // We don't support various loading methods like esmodules,
- // choosing a version etc. for jsdom.
- "dist/jquery.js",
-
- // A partial replacement for testinit.js#loadTests()
- "test/data/testrunner.js",
-
- // jsdom only runs basic tests
- "test/unit/basic.js",
-
- {
- pattern: "test/**/*.@(js|css|jpg|html|xml|svg)",
- included: false,
- served: true
- }
- ]
- },
- browsers: [ "jsdom" ]
- },
-
- // To debug tests with Karma:
- // 1. Run 'grunt karma:chrome-debug' or 'grunt karma:firefox-debug'
- // (any karma subtask that has singleRun=false)
- // 2. Press "Debug" in the opened browser window to start
- // the tests. Unlike the other karma tasks, the debug task will
- // keep the browser window open.
- "chrome-debug": {
- browsers: [ "Chrome" ],
- singleRun: false
- },
- "firefox-debug": {
- browsers: [ "Firefox" ],
- singleRun: false
- },
- "ie-debug": {
- browsers: [ "IE" ],
- singleRun: false
- }
- },
- watch: {
- files: [ "<%= eslint.dev.src %>" ],
- tasks: [ "dev" ]
- },
- minify: {
- all: {
- files: {
- "dist/<%= grunt.option('filename').replace('.js', '.min.js') %>":
- "dist/<%= grunt.option('filename') %>"
- },
- options: {
- sourceMap: {
- filename: "dist/<%= grunt.option('filename').replace('.js', '.min.map') %>",
-
- // The map's `files` & `sources` property are set incorrectly, fix
- // them via overrides from the task config.
- // See https://github.com/swc-project/swc/issues/7588#issuecomment-1624345254
- overrides: {
- file: "jquery.min.js",
- sources: [
- "jquery.js"
- ]
- }
- },
- swc: {
- format: {
- ecma: 5,
- asciiOnly: true,
- comments: false,
- preamble: "/*! jQuery v4.0.0-pre | " +
- "(c) OpenJS Foundation and other contributors | " +
- "jquery.org/license */\n"
- },
- compress: {
- ecma: 5,
- hoist_funs: false,
- loops: false
- },
- mangle: true
- }
- }
- }
- }
- } );
-
- // Load grunt tasks from NPM packages
- require( "load-grunt-tasks" )( grunt, {
- pattern: nodeV14OrNewer ? [ "grunt-*" ] : [ "grunt-*", "!grunt-eslint" ]
- } );
-
- // Integrate jQuery specific tasks
- grunt.loadTasks( "build/tasks" );
-
- grunt.registerTask( "print_old_node_message", ( ...args ) => {
- var task = args.join( ":" );
- grunt.log.writeln( "Old Node.js detected, running the task \"" + task + "\" skipped..." );
- } );
-
- grunt.registerTask( "print_jsdom_message", () => {
- grunt.log.writeln( "Node.js 17 or newer detected, skipping jsdom tests..." );
- } );
-
- grunt.registerTask( "lint", [
- "jsonlint",
-
- // Running the full eslint task without breaking it down to targets
- // would run the dist target first which would point to errors in the built
- // file, making it harder to fix them. We want to check the built file only
- // if we already know the source files pass the linter.
- runIfNewNode( "eslint:dev" ),
- runIfNewNode( "eslint:dist" )
- ] );
-
- grunt.registerTask( "lint:newer", [
- "newer:jsonlint",
-
- // Don't replace it with just the task; see the above comment.
- runIfNewNode( "newer:eslint:dev" ),
- runIfNewNode( "newer:eslint:dist" )
- ] );
-
- grunt.registerTask( "test:fast", runIfNewNode( "node_smoke_tests" ) );
- grunt.registerTask( "test:slow", [
- runIfNewNode( "promises_aplus_tests" ),
-
- // Support: Node.js 17+
- // jsdom fails to connect to the Karma server in Node 17+.
- // Until we figure out a fix, skip jsdom tests there.
- nodeV17OrNewer ? "print_jsdom_message" : runIfNewNode( "karma:jsdom" )
- ] );
-
- grunt.registerTask( "test:prepare", [
- "npmcopy",
- "qunit_fixture",
- "babel:tests"
- ] );
-
- grunt.registerTask( "test", [
- "test:prepare",
- "test:fast",
- "test:slow"
- ] );
-
- grunt.registerTask( "dev", [
- "build:*:*",
- runIfNewNode( "newer:eslint:dev" ),
- "newer:minify",
- "remove_map_comment",
- "dist:*",
- "qunit_fixture",
- "compare_size"
- ] );
-
- grunt.registerTask( "default", [
- runIfNewNode( "eslint:dev" ),
- "build:*:*",
- "minify",
- "remove_map_comment",
- "dist:*",
- "test:prepare",
- runIfNewNode( "eslint:dist" ),
- "test:fast",
- "compare_size"
- ] );
-};