diff --git a/packages/core/parcel-bundler/src/packagers/JSConcatPackager.js b/packages/core/parcel-bundler/src/packagers/JSConcatPackager.js index ee8b2485c65..5500b648667 100644 --- a/packages/core/parcel-bundler/src/packagers/JSConcatPackager.js +++ b/packages/core/parcel-bundler/src/packagers/JSConcatPackager.js @@ -372,7 +372,7 @@ class JSConcatPackager extends Packager { } getBundleSpecifier(bundle) { - let name = path.basename(bundle.name); + let name = path.relative(path.dirname(this.bundle.name), bundle.name); if (bundle.entryAsset) { return [name, bundle.entryAsset.id]; } diff --git a/packages/core/parcel-bundler/src/packagers/JSPackager.js b/packages/core/parcel-bundler/src/packagers/JSPackager.js index b1b375bc718..c7abdbc9970 100644 --- a/packages/core/parcel-bundler/src/packagers/JSPackager.js +++ b/packages/core/parcel-bundler/src/packagers/JSPackager.js @@ -94,7 +94,7 @@ class JSPackager extends Packager { } getBundleSpecifier(bundle) { - let name = path.basename(bundle.name); + let name = path.relative(path.dirname(this.bundle.name), bundle.name); if (bundle.entryAsset) { return [name, bundle.entryAsset.id]; } diff --git a/packages/core/parcel-bundler/test/integration/dynamic-subdirectory/local.js b/packages/core/parcel-bundler/test/integration/dynamic-subdirectory/local.js new file mode 100644 index 00000000000..59aa6ffd125 --- /dev/null +++ b/packages/core/parcel-bundler/test/integration/dynamic-subdirectory/local.js @@ -0,0 +1,2 @@ +exports.a = 1; +exports.b = 2; diff --git a/packages/core/parcel-bundler/test/integration/dynamic-subdirectory/subdirectory/index.js b/packages/core/parcel-bundler/test/integration/dynamic-subdirectory/subdirectory/index.js new file mode 100644 index 00000000000..458492542bb --- /dev/null +++ b/packages/core/parcel-bundler/test/integration/dynamic-subdirectory/subdirectory/index.js @@ -0,0 +1,7 @@ +var local = import('../local'); + +module.exports = function () { + return local.then(function (l) { + return l.a + l.b; + }); +}; diff --git a/packages/core/parcel-bundler/test/javascript.js b/packages/core/parcel-bundler/test/javascript.js index d620fc634f6..a19a6a31f13 100644 --- a/packages/core/parcel-bundler/test/javascript.js +++ b/packages/core/parcel-bundler/test/javascript.js @@ -1,7 +1,14 @@ const assert = require('assert'); const fs = require('../src/utils/fs'); const path = require('path'); -const {bundle, run, assertBundleTree, deferred, ncp} = require('./utils'); +const { + bundle, + bundler, + run, + assertBundleTree, + deferred, + ncp +} = require('./utils'); const {mkdirp} = require('../src/utils/fs'); const {symlinkSync} = require('fs'); @@ -314,6 +321,27 @@ describe('javascript', function() { assert.equal(await output(), 3); }); + it('should load dynamic bundle when entry is in a subdirectory', async function() { + let bu = await bundler( + path.join( + __dirname, + '/integration/dynamic-subdirectory/subdirectory/index.js' + ), + { + target: 'browser' + } + ); + // Set the rootDir to make sure subdirectory is preserved + bu.options.rootDir = path.join( + __dirname, + '/integration/dynamic-subdirectory' + ); + let b = await bu.bundle(); + let output = await run(b); + assert.equal(typeof output, 'function'); + assert.equal(await output(), 3); + }); + it('should support bundling workers', async function() { let b = await bundle(path.join(__dirname, '/integration/workers/index.js')); diff --git a/packages/core/parcel-bundler/test/utils.js b/packages/core/parcel-bundler/test/utils.js index f43be64b9c1..9661f0f33be 100644 --- a/packages/core/parcel-bundler/test/utils.js +++ b/packages/core/parcel-bundler/test/utils.js @@ -82,7 +82,9 @@ function prepareBrowserContext(bundle, globals) { setTimeout(function() { if (el.tag === 'script') { vm.runInContext( - nodeFS.readFileSync(path.join(__dirname, 'dist', el.src)), + nodeFS.readFileSync( + path.join(path.dirname(bundle.name), el.src) + ), ctx ); } @@ -119,13 +121,13 @@ function prepareBrowserContext(bundle, globals) { arrayBuffer() { return Promise.resolve( new Uint8Array( - nodeFS.readFileSync(path.join(__dirname, 'dist', url)) + nodeFS.readFileSync(path.join(path.dirname(bundle.name), url)) ).buffer ); }, text() { return Promise.resolve( - nodeFS.readFileSync(path.join(__dirname, 'dist', url), 'utf8') + nodeFS.readFileSync(path.join(path.dirname(bundle.name), url), 'utf8') ); } });