From 535b418a7ca3be6d6c5c9094ebfa755566361c5d Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Mon, 9 Apr 2018 08:20:30 +0200 Subject: [PATCH] Fix sourcemap reference in JS output (#1148) --- .../src/packagers/JSPackager.js | 17 ++++---- .../integration/sourcemap-reference/data.json | 6 +++ .../sourcemap-reference/index.html | 8 ++++ .../integration/sourcemap-reference/index.js | 1 + .../core/parcel-bundler/test/sourcemaps.js | 39 +++++++++++++++++++ 5 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 packages/core/parcel-bundler/test/integration/sourcemap-reference/data.json create mode 100644 packages/core/parcel-bundler/test/integration/sourcemap-reference/index.html create mode 100644 packages/core/parcel-bundler/test/integration/sourcemap-reference/index.js diff --git a/packages/core/parcel-bundler/src/packagers/JSPackager.js b/packages/core/parcel-bundler/src/packagers/JSPackager.js index 5bce5617f03..7234e66664e 100644 --- a/packages/core/parcel-bundler/src/packagers/JSPackager.js +++ b/packages/core/parcel-bundler/src/packagers/JSPackager.js @@ -205,13 +205,16 @@ class JSPackager extends Packager { await this.write('},{},' + JSON.stringify(entry) + ')'); if (this.options.sourceMaps) { - // Add source map url - await this.write( - `\n//# sourceMappingURL=${urlJoin( - this.options.publicURL, - path.basename(this.bundle.name, '.js') + '.map' - )}` - ); + // Add source map url if a map bundle exists + let mapBundle = this.bundle.siblingBundlesMap.get('map'); + if (mapBundle) { + await this.write( + `\n//# sourceMappingURL=${urlJoin( + this.options.publicURL, + path.basename(mapBundle.name) + )}` + ); + } } await this.dest.end(); } diff --git a/packages/core/parcel-bundler/test/integration/sourcemap-reference/data.json b/packages/core/parcel-bundler/test/integration/sourcemap-reference/data.json new file mode 100644 index 00000000000..f18b8ec4913 --- /dev/null +++ b/packages/core/parcel-bundler/test/integration/sourcemap-reference/data.json @@ -0,0 +1,6 @@ +{ + "some": "data", + "more": { + "data": "value" + } +} \ No newline at end of file diff --git a/packages/core/parcel-bundler/test/integration/sourcemap-reference/index.html b/packages/core/parcel-bundler/test/integration/sourcemap-reference/index.html new file mode 100644 index 00000000000..f1058e56ee0 --- /dev/null +++ b/packages/core/parcel-bundler/test/integration/sourcemap-reference/index.html @@ -0,0 +1,8 @@ + + + + + + Hello! + + \ No newline at end of file diff --git a/packages/core/parcel-bundler/test/integration/sourcemap-reference/index.js b/packages/core/parcel-bundler/test/integration/sourcemap-reference/index.js new file mode 100644 index 00000000000..298eba3f0a8 --- /dev/null +++ b/packages/core/parcel-bundler/test/integration/sourcemap-reference/index.js @@ -0,0 +1 @@ +import './data.json'; \ No newline at end of file diff --git a/packages/core/parcel-bundler/test/sourcemaps.js b/packages/core/parcel-bundler/test/sourcemaps.js index 0d184ab0907..cbd41a312ed 100644 --- a/packages/core/parcel-bundler/test/sourcemaps.js +++ b/packages/core/parcel-bundler/test/sourcemaps.js @@ -148,4 +148,43 @@ describe('sourcemaps', function() { assert.equal(typeof output, 'function'); assert.equal(output(), 14); }); + + it('should create a valid sourcemap reference for a child bundle', async function() { + let b = await bundle( + __dirname + '/integration/sourcemap-reference/index.html' + ); + + assertBundleTree(b, { + name: 'index.html', + assets: ['index.html'], + childBundles: [ + { + type: 'js', + assets: ['index.js', 'data.json'], + childBundles: [ + { + type: 'map' + } + ] + } + ] + }); + + let jsOutput = fs + .readFileSync(Array.from(b.childBundles)[0].name) + .toString(); + + let sourcemapReference = path.join( + __dirname, + '/dist/', + jsOutput.substring(jsOutput.lastIndexOf('//# sourceMappingURL') + 22) + ); + assert( + fs.existsSync(path.join(sourcemapReference)), + 'referenced sourcemap should exist' + ); + + let map = fs.readFileSync(path.join(sourcemapReference)).toString(); + mapValidator(jsOutput, map); + }); });