From 62f1cd2f58a626fa86f845a251156ec6310b6d56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20S=C3=A1nchez=20Ortega?= Date: Mon, 10 Aug 2015 15:04:21 +0200 Subject: [PATCH] Build sourcemaps via magic-string --- .gitignore | 1 + build/build.js | 37 ++++++++++++++++++++++++++++--------- package.json | 1 + 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index d3c27b0e1..3e1080a7c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ tmp/**/* *.sublime-* _site dist/*.js +dist/*.map coverage/ *.js.html index.html diff --git a/build/build.js b/build/build.js index dc05665ff..b198a6d51 100644 --- a/build/build.js +++ b/build/build.js @@ -1,6 +1,7 @@ var fs = require('fs'), UglifyJS = require('uglify-js'), zlib = require('zlib'), + MagicString = require('magic-string'), deps = require('./deps.js').deps; @@ -69,12 +70,21 @@ function loadSilently(path) { } } -function combineFiles(files) { - var content = ''; +function bundleFiles(files, copy) { + var bundle = new MagicString.Bundle(); + for (var i = 0, len = files.length; i < len; i++) { - content += fs.readFileSync(files[i], 'utf8') + '\n\n'; + bundle.addSource({ + filename: files[i], + content: new MagicString( fs.readFileSync(files[i], 'utf8') + '\n\n' ) + }); } - return content; + + bundle.prepend( + copy + '(function (window, document, undefined) {' + ).append('}(window, document));'); + + return bundle; } function bytesToKB(bytes) { @@ -85,15 +95,19 @@ exports.build = function (callback, version, compsBase32, buildName) { var files = getFiles(compsBase32); - console.log('Concatenating and compressing ' + files.length + ' files...'); + console.log('Bundling and compressing ' + files.length + ' files...'); var copy = fs.readFileSync('src/copyright.js', 'utf8').replace('{VERSION}', version), - intro = '(function (window, document, undefined) {', - outro = '}(window, document));', - newSrc = copy + intro + combineFiles(files) + outro, - pathPart = 'dist/leaflet' + (buildName ? '-' + buildName : ''), + filenamePart = 'leaflet' + (buildName ? '-' + buildName : ''), + pathPart = 'dist/' + filenamePart, srcPath = pathPart + '-src.js', + mapPath = pathPart + '-src.map', + srcFilename = filenamePart + '-src.js', + mapFilename = filenamePart + '-src.map', + + bundle = bundleFiles(files, copy), + newSrc = bundle.toString() + '\n//# sourceMappingURL=' + mapFilename, oldSrc = loadSilently(srcPath), srcDelta = getSizeDelta(newSrc, oldSrc, true); @@ -102,6 +116,11 @@ exports.build = function (callback, version, compsBase32, buildName) { if (newSrc !== oldSrc) { fs.writeFileSync(srcPath, newSrc); + fs.writeFileSync(mapPath, bundle.generateMap({ + file: srcFilename, + includeContent: true, + hires: false + })); console.log('\tSaved to ' + srcPath); } diff --git a/package.json b/package.json index 82d7f8638..5dc8fc30a 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "karma-mocha": "~0.2.0", "karma-phantomjs-launcher": "^0.2.0", "karma-safari-launcher": "~0.1.1", + "magic-string": "^0.6.4", "mocha": "~2.2.5", "tin": "^0.5.0", "uglify-js": "~2.4.23"