mirror of
https://github.com/jquery/jquery.git
synced 2025-01-10 18:24:24 +00:00
Fix #13776: Add banner before generating source map. Close gh-1246.
This commit is contained in:
parent
aae7abfeb6
commit
9d16fe6283
65
Gruntfile.js
65
Gruntfile.js
@ -105,14 +105,31 @@ module.exports = function( grunt ) {
|
||||
tasks: "dev"
|
||||
},
|
||||
|
||||
"pre-uglify": {
|
||||
all: {
|
||||
files: {
|
||||
"dist/jquery.pre-min.js": [ "dist/jquery.js" ]
|
||||
},
|
||||
options: {
|
||||
banner: "/*! jQuery v<%= pkg.version %> | " +
|
||||
"(c) 2005, 2013 jQuery Foundation, Inc. | " +
|
||||
"jquery.org/license\n" +
|
||||
"//@ sourceMappingURL=jquery.min.map\n" +
|
||||
"*/"
|
||||
}
|
||||
}
|
||||
},
|
||||
uglify: {
|
||||
all: {
|
||||
files: {
|
||||
"dist/jquery.min.js": [ "dist/jquery.js" ]
|
||||
"dist/jquery.min.js": [ "dist/jquery.pre-min.js" ]
|
||||
},
|
||||
options: {
|
||||
banner: "/*! jQuery v<%= pkg.version %> | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license */",
|
||||
// Keep our hard-coded banner
|
||||
preserveComments: "some",
|
||||
sourceMap: "dist/jquery.min.map",
|
||||
sourceMappingURL: "jquery.min.map",
|
||||
report: "min",
|
||||
beautify: {
|
||||
ascii_only: true
|
||||
},
|
||||
@ -225,7 +242,6 @@ module.exports = function( grunt ) {
|
||||
grunt.log.writeln( "File '" + name + "' created." );
|
||||
});
|
||||
|
||||
|
||||
// Special "alias" task to make custom build creation less grawlix-y
|
||||
grunt.registerTask( "custom", function() {
|
||||
var done = this.async(),
|
||||
@ -245,7 +261,7 @@ module.exports = function( grunt ) {
|
||||
|
||||
grunt.util.spawn({
|
||||
cmd: process.platform === "win32" ? "grunt.cmd" : "grunt",
|
||||
args: [ "build:*:*:" + modules, "uglify", "dist" ]
|
||||
args: [ "build:*:*:" + modules, "pre-uglify", "uglify", "dist" ]
|
||||
}, function( err, result ) {
|
||||
if ( err ) {
|
||||
grunt.verbose.error();
|
||||
@ -260,7 +276,6 @@ module.exports = function( grunt ) {
|
||||
});
|
||||
|
||||
// Special concat/build task to handle various jQuery build requirements
|
||||
//
|
||||
grunt.registerMultiTask(
|
||||
"build",
|
||||
"Concatenate source (include/exclude modules with +/- flags), embed date/version",
|
||||
@ -438,7 +453,7 @@ module.exports = function( grunt ) {
|
||||
nonascii = false;
|
||||
|
||||
distpaths.forEach(function( filename ) {
|
||||
var i, c, map,
|
||||
var i, c,
|
||||
text = fs.readFileSync( filename, "utf8" );
|
||||
|
||||
// Ensure files use only \n for line endings, not \r\n
|
||||
@ -466,19 +481,17 @@ module.exports = function( grunt ) {
|
||||
if ( /\.map$/.test( filename ) ) {
|
||||
text = text.replace( /"dist\//g, "\"" );
|
||||
fs.writeFileSync( filename, text, "utf-8" );
|
||||
|
||||
// Use our hard-coded sourceMap directive instead of the autogenerated one (#13274; #13776)
|
||||
} else if ( /\.min\.js$/.test( filename ) ) {
|
||||
// Wrap sourceMap directive in multiline comments (#13274)
|
||||
text = text.replace( /\n?(\/\/@\s*sourceMappingURL=)(.*)/,
|
||||
function( _, directive, path ) {
|
||||
map = "\n" + directive + path.replace( /^dist\//, "" );
|
||||
i = 0;
|
||||
text = text.replace( /(?:\/\*|)\n?\/\/@\s*sourceMappingURL=.*(\n\*\/|)/g,
|
||||
function( match ) {
|
||||
if ( i++ ) {
|
||||
return "";
|
||||
});
|
||||
if ( map ) {
|
||||
text = text.replace( /(^\/\*[\w\W]*?)\s*\*\/|$/,
|
||||
function( _, comment ) {
|
||||
return ( comment || "\n/*" ) + map + "\n*/";
|
||||
});
|
||||
}
|
||||
return match;
|
||||
});
|
||||
fs.writeFileSync( filename, text, "utf-8" );
|
||||
}
|
||||
|
||||
@ -499,6 +512,24 @@ module.exports = function( grunt ) {
|
||||
return !nonascii;
|
||||
});
|
||||
|
||||
// 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.replace( /^\/\*!(?:.|\n)*?\*\/\n?/gm, "" );
|
||||
}).join("\n");
|
||||
|
||||
// Write temp file (with optional banner)
|
||||
grunt.file.write( mapping.dest, ( banner || "" ) + input );
|
||||
});
|
||||
});
|
||||
|
||||
// Load grunt tasks from NPM packages
|
||||
grunt.loadNpmTasks("grunt-compare-size");
|
||||
grunt.loadNpmTasks("grunt-git-authors");
|
||||
@ -508,7 +539,7 @@ module.exports = function( grunt ) {
|
||||
grunt.loadNpmTasks("grunt-contrib-uglify");
|
||||
|
||||
// Default grunt
|
||||
grunt.registerTask( "default", [ "update_submodules", "selector", "build:*:*", "jshint", "uglify", "dist:*", "compare_size" ] );
|
||||
grunt.registerTask( "default", [ "update_submodules", "selector", "build:*:*", "jshint", "pre-uglify", "uglify", "dist:*", "compare_size" ] );
|
||||
|
||||
// Short list as a high frequency watch task
|
||||
grunt.registerTask( "dev", [ "selector", "build:*:*", "jshint" ] );
|
||||
|
@ -28,7 +28,7 @@
|
||||
"grunt-update-submodules": "0.2.0",
|
||||
"grunt-contrib-watch": "0.3.1",
|
||||
"grunt-contrib-jshint": "0.3.0",
|
||||
"grunt-contrib-uglify": "0.1.2",
|
||||
"grunt-contrib-uglify": "0.2.0",
|
||||
"grunt": "0.4.1",
|
||||
"gzip-js": "0.3.1",
|
||||
"testswarm": "0.2.2"
|
||||
|
Loading…
Reference in New Issue
Block a user