diff options
author | Michał Gołębiowski <m.goleb@gmail.com> | 2013-05-22 15:11:19 +0200 |
---|---|---|
committer | Michał Gołębiowski <m.goleb@gmail.com> | 2013-05-23 21:10:59 +0200 |
commit | ce1a8295d7adf0bd5d6ab033243559b796a97e3d (patch) | |
tree | 1c9019e63ce97e6bd6b55e3760a44dfbeeb8a711 /Gruntfile.js | |
parent | 53095883ef423260270de50b387eb5b17963d333 (diff) | |
download | jquery-ce1a8295d7adf0bd5d6ab033243559b796a97e3d.tar.gz jquery-ce1a8295d7adf0bd5d6ab033243559b796a97e3d.zip |
Fix #13793. Correct source map generation bugs. Close gh-1275. (cherry-picked from commit 997da31121b9d084ccba05a9bb1e258c8c8faaf0)
Diffstat (limited to 'Gruntfile.js')
-rw-r--r-- | Gruntfile.js | 56 |
1 files changed, 50 insertions, 6 deletions
diff --git a/Gruntfile.js b/Gruntfile.js index 7ba99744b..5e909f423 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -111,11 +111,12 @@ module.exports = function( grunt ) { "dist/jquery.pre-min.js": [ "dist/jquery.js" ] }, options: { - banner: "/*! jQuery v<%= pkg.version %> | " + + banner: "\n\n\n\n\n\n\n\n\n\n" + // banner line size must be preserved + "/*! jQuery v<%= pkg.version %> | " + "(c) 2005, 2013 jQuery Foundation, Inc. | " + "jquery.org/license\n" + "//@ sourceMappingURL=jquery.min.map\n" + - "*/" + "*/\n" } } }, @@ -141,6 +142,17 @@ module.exports = function( grunt ) { } } } + }, + "post-uglify": { + all: { + files: { + "dist/jquery.min.map.tmp": [ "dist/jquery.min.map" ], + "dist/jquery.min.js.tmp": [ "dist/jquery.min.js" ] + }, + options: { + tempFiles: [ "dist/jquery.min.map.tmp", "dist/jquery.min.js.tmp", "dist/jquery.pre-min.js" ] + } + } } }); @@ -432,7 +444,7 @@ module.exports = function( grunt ) { // Check for stored destination paths // ( set in dist/.destination.json ) - stored = Object.keys( grunt.config("dst") ); + stored = Object.keys( grunt.config( "dst" ) ); // Allow command line input as well flags = Object.keys( this.flags ); @@ -443,7 +455,7 @@ module.exports = function( grunt ) { }); // Ensure the dist files are pure ASCII - fs = require("fs"); + fs = require( "fs" ); nonascii = false; distpaths.forEach(function( filename ) { @@ -516,7 +528,13 @@ module.exports = function( grunt ) { var contents = grunt.file.read( file ); // Strip banners - return contents.replace( /^\/\*!(?:.|\n)*?\*\/\n?/gm, "" ); + return contents + // Remove the main jQuery banner, it'll be replaced by the new banner anyway. + .replace( /^\/\*!(?:.|\n)*?\*\/\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) @@ -524,6 +542,32 @@ module.exports = function( grunt ) { }); }); + // 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() { + var fs = require( "fs" ); + + 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 ); + }); + }); + // Load grunt tasks from NPM packages grunt.loadNpmTasks("grunt-compare-size"); grunt.loadNpmTasks("grunt-git-authors"); @@ -533,7 +577,7 @@ module.exports = function( grunt ) { grunt.loadNpmTasks("grunt-contrib-uglify"); // Default grunt - grunt.registerTask( "default", [ "update_submodules", "selector", "build:*:*", "jshint", "pre-uglify", "uglify", "dist:*", "compare_size" ] ); + grunt.registerTask( "default", [ "update_submodules", "selector", "build:*:*", "jshint", "pre-uglify", "uglify", "post-uglify", "dist:*", "compare_size" ] ); // Short list as a high frequency watch task grunt.registerTask( "dev", [ "selector", "build:*:*", "jshint" ] ); |