diff --git a/bin/advanced.txt b/bin/advanced.txt index 6d7c08bdd..b23688c34 100644 --- a/bin/advanced.txt +++ b/bin/advanced.txt @@ -100,6 +100,10 @@ Advanced Options: Register MODULE as a plugin. + --preserve-symlinks + + Preserves symlinks when resolving modules. + Passing arguments to transforms and plugins: For -t, -g, and -p, you may use subarg syntax to pass options to the diff --git a/bin/args.js b/bin/args.js index 6a4166afd..6aa07567b 100644 --- a/bin/args.js +++ b/bin/args.js @@ -14,7 +14,7 @@ module.exports = function (args, opts) { 'boolean': [ 'deps', 'pack', 'ig', 'dg', 'im', 'd', 'list', 'builtins', 'commondir', 'bare', 'full-paths', 'bundle-external', 'bf', - 'node' + 'node', 'preserve-symlinks' ], string: [ 's', 'r', 'u', 'x', 't', 'i', 'o', 'e', 'c', 'it' ], alias: { @@ -107,6 +107,7 @@ module.exports = function (args, opts) { browserField: argv.browserField, transformKey: argv['transform-key'] ? ['browserify', argv['transform-key']] : undefined, dedupe: argv['dedupe'], + preserveSymlinks: argv['preserve-symlinks'], detectGlobals: argv.detectGlobals, insertGlobals: argv['insert-globals'] || argv.ig, diff --git a/index.js b/index.js index d04c8e415..b1bbe6f0c 100644 --- a/index.js +++ b/index.js @@ -488,10 +488,15 @@ Browserify.prototype._createDeps = function (opts) { } } if (err) cb(err, file, pkg) - else if (file) fs.realpath(file, function (err, res) { - cb(err, res, pkg, file); - }); - else cb(err, null, pkg) + else if (file) { + if (opts.preserveSymlinks && parent) { + return cb(err, path.resolve(file), pkg, file) + } + + fs.realpath(file, function (err, res) { + cb(err, res, pkg, file); + }); + } else cb(err, null, pkg) }); }; diff --git a/test/preserve-symlinks.js b/test/preserve-symlinks.js new file mode 100644 index 000000000..555787bea --- /dev/null +++ b/test/preserve-symlinks.js @@ -0,0 +1,15 @@ +var browserify = require('../'); +var vm = require('vm'); +var test = require('tap').test; + +test('optionally preserves symlinks', function (t) { + t.plan(2); + + var b = browserify(__dirname + '/preserve_symlinks/a/index.js', {preserveSymlinks: true}); + b.bundle(function (err, buf) { + t.ok(!err); + t.ok(buf); + var src = buf.toString('utf8'); + vm.runInNewContext(src, {}); + }); +}); diff --git a/test/preserve_symlinks/a/index.js b/test/preserve_symlinks/a/index.js new file mode 100644 index 000000000..5f6937c38 --- /dev/null +++ b/test/preserve_symlinks/a/index.js @@ -0,0 +1 @@ +require('b'); diff --git a/test/preserve_symlinks/a/node_modules/b b/test/preserve_symlinks/a/node_modules/b new file mode 120000 index 000000000..d04c0141d --- /dev/null +++ b/test/preserve_symlinks/a/node_modules/b @@ -0,0 +1 @@ +../../b/ \ No newline at end of file diff --git a/test/preserve_symlinks/a/node_modules/c/index.js b/test/preserve_symlinks/a/node_modules/c/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/preserve_symlinks/b/index.js b/test/preserve_symlinks/b/index.js new file mode 100644 index 000000000..a56a50847 --- /dev/null +++ b/test/preserve_symlinks/b/index.js @@ -0,0 +1 @@ +require('c');