diff --git a/Jakefile.js b/Jakefile.js index ac89d35c..43eab8b9 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -24,24 +24,42 @@ task('lint', function () { desc('Combine and compress Leaflet source files'); task('build', ['lint'], function (compsBase32, buildName) { - var name = buildName || 'custom', - path = 'dist/leaflet' + (compsBase32 ? '-' + name : ''); + var pathPart = 'dist/leaflet' + (buildName ? '-' + buildName : ''), + srcPath = pathPart + '-src.js', + path = pathPart + '.js'; var files = build.getFiles(compsBase32); console.log('Concatenating ' + files.length + ' files...'); var content = build.combineFiles(files); - console.log('\tUncompressed size: ' + content.length); - build.save(path + '-src.js', COPYRIGHT + content); - console.log('\tSaved to ' + path); + var oldSrc = build.load(srcPath), + newSrc = COPYRIGHT + content, + srcDelta = build.getSizeDelta(newSrc, oldSrc); + + console.log('\tUncompressed size: ' + newSrc.length + ' bytes (' + srcDelta + ')'); + + if (newSrc === oldSrc) { + console.log('\tNo changes'); + } else { + build.save(srcPath, newSrc); + console.log('\tSaved to ' + srcPath); + } console.log('Compressing...'); - var compressed = COPYRIGHT + build.uglify(content); - console.log('\tCompressed size: ' + compressed.length); - build.save(path + '.js', compressed); - console.log('\tSaved to ' + path); + var oldCompressed = build.load(path), + newCompressed = COPYRIGHT + build.uglify(content), + delta = build.getSizeDelta(newCompressed, oldCompressed); + + console.log('\tCompressed size: ' + newCompressed.length + ' bytes (' + delta + ')'); + + if (newCompressed === oldCompressed) { + console.log('\tNo changes'); + } else { + build.save(path, newCompressed); + console.log('\tSaved to ' + path); + } }); task('default', ['build']); \ No newline at end of file diff --git a/build/build.js b/build/build.js index dff8ab2d..a918d3bd 100644 --- a/build/build.js +++ b/build/build.js @@ -37,7 +37,7 @@ exports.getFiles = function (compsBase32) { } return files; -} +}; exports.uglify = function (code) { var pro = uglifyjs.uglify; @@ -48,7 +48,7 @@ exports.uglify = function (code) { ast = pro.ast_squeeze_more(ast); return pro.gen_code(ast); -} +}; exports.combineFiles = function (files) { var content = ''; @@ -56,8 +56,24 @@ exports.combineFiles = function (files) { content += fs.readFileSync(files[i], 'utf8') + '\r\n\r\n'; } return content; -} +}; exports.save = function (savePath, compressed) { - fs.writeFileSync(savePath, compressed, 'utf8'); -} \ No newline at end of file + return fs.writeFileSync(savePath, compressed, 'utf8'); +}; + +exports.load = function (loadPath) { + try { + return fs.readFileSync(loadPath, 'utf8'); + } catch (e) { + return null; + } +}; + +exports.getSizeDelta = function (newContent, oldContent) { + if (!oldContent) { + return 'new'; + } + var delta = newContent.length - oldContent.length; + return (delta >= 0 ? '+' : '') + delta; +}; \ No newline at end of file