aboutsummaryrefslogtreecommitdiffstats
path: root/Gruntfile.js
diff options
context:
space:
mode:
authorMichał Gołębiowski <m.goleb@gmail.com>2013-05-22 15:11:19 +0200
committerMichał Gołębiowski <m.goleb@gmail.com>2013-05-23 21:10:59 +0200
commitce1a8295d7adf0bd5d6ab033243559b796a97e3d (patch)
tree1c9019e63ce97e6bd6b55e3760a44dfbeeb8a711 /Gruntfile.js
parent53095883ef423260270de50b387eb5b17963d333 (diff)
downloadjquery-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.js56
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" ] );