mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
8be4c0e4f8
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
73 lines
2.0 KiB
JavaScript
73 lines
2.0 KiB
JavaScript
"use strict";
|
|
|
|
module.exports = function( grunt ) {
|
|
const fs = require( "fs" );
|
|
const filename = grunt.option( "filename" );
|
|
const distFolder = grunt.option( "dist-folder" );
|
|
const distPaths = [
|
|
`${ distFolder }/${ filename }`,
|
|
`${ distFolder }/${ filename.replace( ".js", ".min.js" ) }`,
|
|
`${ distFolder }/${ filename.replace( ".js", ".min.map" ) }`
|
|
];
|
|
|
|
// Process files for distribution
|
|
grunt.registerTask( "dist", function() {
|
|
let stored, flags, paths, nonascii;
|
|
|
|
// Check for stored destination paths
|
|
// ( set in dist/.destination.json )
|
|
stored = Object.keys( grunt.config( "dst" ) );
|
|
|
|
// Allow command line input as well
|
|
flags = Object.keys( this.flags );
|
|
|
|
// Combine all output target paths
|
|
paths = [].concat( stored, flags ).filter( function( path ) {
|
|
return path !== "*";
|
|
} );
|
|
|
|
// Ensure the dist files are pure ASCII
|
|
nonascii = false;
|
|
|
|
distPaths.forEach( function( filename ) {
|
|
let i, c;
|
|
const text = fs.readFileSync( filename, "utf8" );
|
|
|
|
// Ensure files use only \n for line endings, not \r\n
|
|
if ( /\x0d\x0a/.test( text ) ) {
|
|
grunt.log.writeln( filename + ": Incorrect line endings (\\r\\n)" );
|
|
nonascii = true;
|
|
}
|
|
|
|
// Ensure only ASCII chars so script tags don't need a charset attribute
|
|
if ( text.length !== Buffer.byteLength( text, "utf8" ) ) {
|
|
grunt.log.writeln( filename + ": Non-ASCII characters detected:" );
|
|
for ( i = 0; i < text.length; i++ ) {
|
|
c = text.charCodeAt( i );
|
|
if ( c > 127 ) {
|
|
grunt.log.writeln( "- position " + i + ": " + c );
|
|
grunt.log.writeln( "-- " + text.substring( i - 20, i + 20 ) );
|
|
break;
|
|
}
|
|
}
|
|
nonascii = true;
|
|
}
|
|
|
|
// Optionally copy dist files to other locations
|
|
paths.forEach( function( path ) {
|
|
let created;
|
|
|
|
if ( !/\/$/.test( path ) ) {
|
|
path += "/";
|
|
}
|
|
|
|
created = path + filename.replace( "dist/", "" );
|
|
grunt.file.write( created, text );
|
|
grunt.log.writeln( "File '" + created + "' created." );
|
|
} );
|
|
} );
|
|
|
|
return !nonascii;
|
|
} );
|
|
};
|