Skip to content

Commit

Permalink
Fix multi entry with cross require
Browse files Browse the repository at this point in the history
  • Loading branch information
zertosh committed Jun 6, 2015
1 parent 34bf148 commit 785fe15
Show file tree
Hide file tree
Showing 6 changed files with 175 additions and 15 deletions.
11 changes: 4 additions & 7 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,16 +156,16 @@ Browserify.prototype.require = function (file, opts) {
if (typeof file === 'object') {
row = xtend(file, opts);
}
else if (isExternalModule(file)) {
else if (!opts.entry && isExternalModule(file)) {
// external module or builtin
row = xtend(opts, { id: expose || file, file: file });
}
else {
row = xtend(opts, { file: file });
row = xtend(opts, { file: path.resolve(basedir, file) });
}

if (!row.id) {
row.id = expose || file;
row.id = expose || row.file;
}
if (expose || !row.entry) {
// Make this available to mdeps so that it can assign the value when it
Expand All @@ -180,10 +180,7 @@ Browserify.prototype.require = function (file, opts) {
self._bpack.hasExports = true;
}

if (row.entry) {
row.file = path.resolve(basedir, row.file);
row.order = self._entryOrder ++;
}
if (row.entry) row.order = self._entryOrder ++;

if (opts.transform === false) row.transform = false;
self.pipeline.write(row);
Expand Down
67 changes: 59 additions & 8 deletions test/multi_entry.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,22 +33,73 @@ test('multi entry', function (t) {
});
});

test('entries as streams', function (t) {
test('multi entry relative', function (t) {
t.plan(6);

// transform paths to streams
for (var i = 0; i < testFiles.length; i++) {
testFiles[i] = fs.createReadStream(testFiles[i]);
}
var rTestFiles = testFiles.map(function(x) {
return x.replace(__dirname + '/', '');
});

var b = browserify({
entries: [rTestFiles[0], rTestFiles[1]],
basedir: __dirname
});
b.add(rTestFiles[2]);

b.on('dep', function(row) {
if (row.entry) {
t.ok(testFiles.indexOf(row.file) > -1, 'should contain full entry path');
}
});

b.bundle(function (err, src) {
var c = {
times : 0,
t : t
};
vm.runInNewContext(src, c);
});
});

test('multi entry relative cwd', function (t) {
t.plan(6);

var rTestFiles = testFiles.map(function(x) {
return x.replace(__dirname + '/', './');
});

var b = browserify({
entries: [rTestFiles[0], rTestFiles[1]],
basedir: __dirname
});
b.add(rTestFiles[2]);

b.on('dep', function(row) {
if (row.entry) {
t.ok(testFiles.indexOf(row.file) > -1, 'should contain full entry path');
}
});

b.bundle(function (err, src) {
var c = {
times : 0,
t : t
};
vm.runInNewContext(src, c);
});
});

test('entries as streams', function (t) {
t.plan(6);

// commondir blows up with streams and without basedir
var opts = { basedir: __dirname + '/multi_entry' };

var b = browserify([
testFiles[0],
testFiles[1]
fs.createReadStream(testFiles[0]),
fs.createReadStream(testFiles[1])
], opts);
b.add(testFiles[2]);
b.add(fs.createReadStream(testFiles[2]));

b.on('dep', function(row) {
if (row.entry) {
Expand Down
92 changes: 92 additions & 0 deletions test/multi_entry_cross_require.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
var browserify = require('../');
var vm = require('vm');
var test = require('tap').test;

var testFiles = [
__dirname + '/multi_entry_cross_require/a.js',
__dirname + '/multi_entry_cross_require/lib/b.js',
__dirname + '/multi_entry_cross_require/c.js'
];

test('multi entry cross require', function (t) {
t.plan(8);

var b = browserify([
testFiles[0],
testFiles[1]
]);
b.add(testFiles[2]);

b.on('dep', function(row) {
if (row.entry) {
t.ok(testFiles.indexOf(row.file) > -1, 'should contain full entry path');
}
});

b.bundle(function (err, src) {
if (err) throw err;
var c = {
times : 0,
t : t
};
vm.runInNewContext(src, c);
});
});

test('multi entry cross require - relative cwd', function (t) {
t.plan(8);

var dsTestFiles = testFiles.map(function(x) {
return x.replace(__dirname + '/', './');
});

var b = browserify({
entries: [dsTestFiles[0], dsTestFiles[1]],
basedir: __dirname
});
b.add(dsTestFiles[2]);

b.on('dep', function(row) {
if (row.entry) {
t.ok(testFiles.indexOf(row.file) > -1, 'should contain full entry path');
}
});

b.bundle(function (err, src) {
if (err) throw err;
var c = {
times : 0,
t : t
};
vm.runInNewContext(src, c);
});
});

test('multi entry cross require - relative', function (t) {
t.plan(8);

var rTestFiles = testFiles.map(function(x) {
return x.replace(__dirname + '/', '');
});

var b = browserify({
entries: [rTestFiles[0], rTestFiles[1]],
basedir: __dirname
});
b.add(rTestFiles[2]);

b.on('dep', function(row) {
if (row.entry) {
t.ok(testFiles.indexOf(row.file) > -1, 'should contain full entry path');
}
});

b.bundle(function (err, src) {
if (err) throw err;
var c = {
times : 0,
t : t
};
vm.runInNewContext(src, c);
});
});
8 changes: 8 additions & 0 deletions test/multi_entry_cross_require/a.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
times ++;
t.equal(times, 1);

var b = require('./lib/b');
t.equal(times, 2);

b.foo();
t.equal(times, 3);
7 changes: 7 additions & 0 deletions test/multi_entry_cross_require/c.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
times++;
t.equal(times, 4);

var b = require('./lib/b');
b.foo();

t.equal(times, 5);
5 changes: 5 additions & 0 deletions test/multi_entry_cross_require/lib/b.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
times++;

module.exports.foo = function() {
times++;
};

0 comments on commit 785fe15

Please sign in to comment.