mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Build: Switch form Terser to SWC for JS minification (#5286)
Also, as part of this, fix the `file` & `sources` properties of the source map file. Fixes gh-5285 Closes gh-5286 Ref gh-5258
This commit is contained in:
parent
198b41c8c2
commit
e24218758b
44
Gruntfile.js
44
Gruntfile.js
@ -312,27 +312,41 @@ module.exports = function( grunt ) {
|
|||||||
files: [ "<%= eslint.dev.src %>" ],
|
files: [ "<%= eslint.dev.src %>" ],
|
||||||
tasks: [ "dev" ]
|
tasks: [ "dev" ]
|
||||||
},
|
},
|
||||||
terser: {
|
minify: {
|
||||||
all: {
|
all: {
|
||||||
files: {
|
files: {
|
||||||
"dist/<%= grunt.option('filename').replace('.js', '.min.js') %>":
|
"dist/<%= grunt.option('filename').replace('.js', '.min.js') %>":
|
||||||
"dist/<%= grunt.option('filename') %>"
|
"dist/<%= grunt.option('filename') %>"
|
||||||
},
|
},
|
||||||
options: {
|
options: {
|
||||||
ecma: 5,
|
|
||||||
sourceMap: {
|
sourceMap: {
|
||||||
filename: "dist/<%= grunt.option('filename').replace('.js', '.min.map') %>"
|
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"
|
||||||
|
]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
format: {
|
swc: {
|
||||||
ascii_only: true,
|
format: {
|
||||||
comments: false,
|
ecma: 5,
|
||||||
preamble: "/*! jQuery v<%= pkg.version %> | " +
|
asciiOnly: true,
|
||||||
"(c) OpenJS Foundation and other contributors | " +
|
comments: false,
|
||||||
"jquery.org/license */"
|
preamble: "/*! jQuery v4.0.0-pre | " +
|
||||||
},
|
"(c) OpenJS Foundation and other contributors | " +
|
||||||
compress: {
|
"jquery.org/license */\n"
|
||||||
hoist_funs: false,
|
},
|
||||||
loops: false
|
compress: {
|
||||||
|
ecma: 5,
|
||||||
|
hoist_funs: false,
|
||||||
|
loops: false
|
||||||
|
},
|
||||||
|
mangle: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -400,7 +414,7 @@ module.exports = function( grunt ) {
|
|||||||
grunt.registerTask( "dev", [
|
grunt.registerTask( "dev", [
|
||||||
"build:*:*",
|
"build:*:*",
|
||||||
runIfNewNode( "newer:eslint:dev" ),
|
runIfNewNode( "newer:eslint:dev" ),
|
||||||
"newer:terser",
|
"newer:minify",
|
||||||
"remove_map_comment",
|
"remove_map_comment",
|
||||||
"dist:*",
|
"dist:*",
|
||||||
"qunit_fixture",
|
"qunit_fixture",
|
||||||
@ -410,7 +424,7 @@ module.exports = function( grunt ) {
|
|||||||
grunt.registerTask( "default", [
|
grunt.registerTask( "default", [
|
||||||
runIfNewNode( "eslint:dev" ),
|
runIfNewNode( "eslint:dev" ),
|
||||||
"build:*:*",
|
"build:*:*",
|
||||||
"terser",
|
"minify",
|
||||||
"remove_map_comment",
|
"remove_map_comment",
|
||||||
"dist:*",
|
"dist:*",
|
||||||
"test:prepare",
|
"test:prepare",
|
||||||
|
@ -339,6 +339,6 @@ module.exports = function( grunt ) {
|
|||||||
"";
|
"";
|
||||||
|
|
||||||
grunt.log.writeln( "Creating custom build...\n" );
|
grunt.log.writeln( "Creating custom build...\n" );
|
||||||
grunt.task.run( [ "build:*:*" + ( modules ? ":" + modules : "" ), "terser", "dist" ] );
|
grunt.task.run( [ "build:*:*" + ( modules ? ":" + modules : "" ), "minify", "dist" ] );
|
||||||
} );
|
} );
|
||||||
};
|
};
|
||||||
|
56
build/tasks/minify.js
Normal file
56
build/tasks/minify.js
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* Minify JavaScript using SWC.
|
||||||
|
*/
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
module.exports = ( grunt ) => {
|
||||||
|
const swc = require( "@swc/core" );
|
||||||
|
|
||||||
|
grunt.registerMultiTask(
|
||||||
|
"minify",
|
||||||
|
"Minify JavaScript using SWC",
|
||||||
|
async function() {
|
||||||
|
const done = this.async();
|
||||||
|
const options = this.options();
|
||||||
|
const sourceMapFilename = options.sourceMap && options.sourceMap.filename;
|
||||||
|
const sourceMapOverrides = options.sourceMap && options.sourceMap.overrides || {};
|
||||||
|
|
||||||
|
await Promise.all( this.files.map( async( { src, dest } ) => {
|
||||||
|
if ( src.length !== 1 ) {
|
||||||
|
grunt.fatal( "The minify task requires a single source per destination" );
|
||||||
|
}
|
||||||
|
|
||||||
|
const { code, map: incompleteMap } = await swc.minify(
|
||||||
|
grunt.file.read( src[ 0 ] ),
|
||||||
|
{
|
||||||
|
...options.swc,
|
||||||
|
inlineSourcesContent: false,
|
||||||
|
sourceMap: sourceMapFilename ?
|
||||||
|
{
|
||||||
|
filename: sourceMapFilename
|
||||||
|
} :
|
||||||
|
false
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
grunt.file.write( dest, code );
|
||||||
|
|
||||||
|
if ( sourceMapFilename ) {
|
||||||
|
|
||||||
|
// Apply map overrides if needed. See the task config description
|
||||||
|
// for more details.
|
||||||
|
const mapObject = {
|
||||||
|
...JSON.parse( incompleteMap ),
|
||||||
|
...sourceMapOverrides
|
||||||
|
};
|
||||||
|
const map = JSON.stringify( mapObject );
|
||||||
|
|
||||||
|
grunt.file.write( sourceMapFilename, map );
|
||||||
|
}
|
||||||
|
} ) );
|
||||||
|
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
@ -3,7 +3,7 @@
|
|||||||
var fs = require( "fs" );
|
var fs = require( "fs" );
|
||||||
|
|
||||||
module.exports = function( grunt ) {
|
module.exports = function( grunt ) {
|
||||||
var config = grunt.config( "terser.all.files" );
|
var config = grunt.config( "minify.all.files" );
|
||||||
grunt.registerTask( "remove_map_comment", function() {
|
grunt.registerTask( "remove_map_comment", function() {
|
||||||
var minLoc = grunt.config.process( Object.keys( config )[ 0 ] );
|
var minLoc = grunt.config.process( Object.keys( config )[ 0 ] );
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "7.10.5",
|
"@babel/core": "7.10.5",
|
||||||
"@babel/plugin-transform-for-of": "7.10.4",
|
"@babel/plugin-transform-for-of": "7.10.4",
|
||||||
|
"@swc/core": "1.3.66",
|
||||||
"colors": "1.4.0",
|
"colors": "1.4.0",
|
||||||
"commitplease": "3.2.0",
|
"commitplease": "3.2.0",
|
||||||
"core-js-bundle": "3.6.5",
|
"core-js-bundle": "3.6.5",
|
||||||
@ -42,7 +43,6 @@
|
|||||||
"grunt-karma": "4.0.2",
|
"grunt-karma": "4.0.2",
|
||||||
"grunt-newer": "1.3.0",
|
"grunt-newer": "1.3.0",
|
||||||
"grunt-npmcopy": "0.2.0",
|
"grunt-npmcopy": "0.2.0",
|
||||||
"grunt-terser": "2.0.0",
|
|
||||||
"gzip-js": "0.3.2",
|
"gzip-js": "0.3.2",
|
||||||
"husky": "4.2.5",
|
"husky": "4.2.5",
|
||||||
"jsdom": "19.0.0",
|
"jsdom": "19.0.0",
|
||||||
@ -67,7 +67,6 @@
|
|||||||
"rollup": "2.21.0",
|
"rollup": "2.21.0",
|
||||||
"sinon": "7.3.1",
|
"sinon": "7.3.1",
|
||||||
"strip-json-comments": "3.1.1",
|
"strip-json-comments": "3.1.1",
|
||||||
"terser": "5.17.6",
|
|
||||||
"testswarm": "1.1.2"
|
"testswarm": "1.1.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
Loading…
Reference in New Issue
Block a user