|
|
@@ -0,0 +1,54 @@ |
|
|
module.exports = function( grunt ) { |
|
|
|
|
|
"use strict"; |
|
|
|
|
|
var fs = require( "fs" ); |
|
|
|
|
|
// Work around grunt-contrib-uglify sourceMap issues (jQuery #13776) |
|
|
grunt.registerMultiTask( "pre-uglify", function() { |
|
|
var banner = this.options().banner; |
|
|
|
|
|
this.files.forEach(function( mapping ) { |
|
|
// Join src |
|
|
var input = mapping.src.map(function( file ) { |
|
|
var contents = grunt.file.read( file ); |
|
|
|
|
|
// Strip banners |
|
|
return contents |
|
|
// Remove the main jQuery banner, it'll be replaced by the new banner anyway. |
|
|
.replace( /^\/\*![\W\w]*?\*\/\n?/g, "" ) |
|
|
// Strip other banners preserving line count. |
|
|
.replace( /^\/\*!(?:.|\n)*?\*\/\n?/gm, function ( match ) { |
|
|
return match.replace( /[^\n]/gm, "" ); |
|
|
}); |
|
|
}).join("\n"); |
|
|
|
|
|
// Write temp file (with optional banner) |
|
|
grunt.file.write( mapping.dest, ( banner || "" ) + input ); |
|
|
}); |
|
|
}); |
|
|
|
|
|
// Change the map file to point back to jquery.js instead of jquery.pre-min.js. |
|
|
// The problem is caused by the pre-uglify task. |
|
|
// Also, remove temporary files. |
|
|
grunt.registerMultiTask( "post-uglify", function() { |
|
|
this.files.forEach(function( mapping ) { |
|
|
var mapFileName = mapping.src[ 0 ]; |
|
|
|
|
|
// Rename the file to a temporary name. |
|
|
fs.renameSync( mapFileName, mapping.dest); |
|
|
grunt.file.write( mapFileName, grunt.file.read( mapping.dest ) |
|
|
// The uglify task erroneously prepends dist/ to file names. |
|
|
.replace( /"dist\//g, "\"" ) |
|
|
// Refer to the source jquery.js, not the temporary jquery.pre-min.js. |
|
|
.replace( /\.pre-min\./g, "." ) |
|
|
// There's already a pragma at the beginning of the file, remove the one at the end. |
|
|
.replace( /\/\/@ sourceMappingURL=jquery\.min\.map$/g, "" )); |
|
|
}); |
|
|
|
|
|
// Remove temporary files. |
|
|
this.options().tempFiles.forEach(function( fileName ) { |
|
|
fs.unlink( fileName ); |
|
|
}); |
|
|
}); |
|
|
}; |