Closes #1177 remove one node_modules optimization

to better support certain project structures.
pull/5370/head
Mathias Buus 2011-06-14 00:42:06 +02:00 committed by isaacs
parent 88552c51ae
commit 39246f65df
3 changed files with 2 additions and 36 deletions

View File

@ -68,8 +68,7 @@ parent directory of the current module, and adds `/node_modules`, and
attempts to load the module from that location.
If it is not found there, then it moves to the parent directory, and so
on, until either the module is found, or the root of the tree is
reached.
on, until the root of the tree is reached.
For example, if the file at `'/home/ry/projects/foo.js'` called
`require('bar.js')`, then node would look in the following locations, in
@ -83,28 +82,6 @@ this order:
This allows programs to localize their dependencies, so that they do not
clash.
#### Optimizations to the `node_modules` Lookup Process
When there are many levels of nested dependencies, it is possible for
these file trees to get fairly long. The following optimizations are thus
made to the process.
First, `/node_modules` is never appended to a folder already ending in
`/node_modules`.
Second, if the file calling `require()` is already inside a `node_modules`
hierarchy, then the top-most `node_modules` folder is treated as the
root of the search tree.
For example, if the file at
`'/home/ry/projects/foo/node_modules/bar/node_modules/baz/quux.js'`
called `require('asdf.js')`, then node would search the following
locations:
* `/home/ry/projects/foo/node_modules/bar/node_modules/baz/node_modules/asdf.js`
* `/home/ry/projects/foo/node_modules/bar/node_modules/asdf.js`
* `/home/ry/projects/foo/node_modules/asdf.js`
### Folders as Modules
It is convenient to organize programs and libraries into self-contained

View File

@ -199,12 +199,7 @@ Module._nodeModulePaths = function(from) {
var paths = [];
var parts = from.split(splitRe);
var root = parts.indexOf('node_modules') - 1;
if (root < 0) root = 0;
var tip = parts.length - 1;
for (var tip = parts.length - 1; tip >= root; tip --) {
for (var tip = parts.length - 1; tip >= 0; tip --) {
// don't search in .../node_modules/node_modules
if (parts[tip] === 'node_modules') continue;
var dir = parts.slice(0, tip + 1).concat('node_modules').join(joiner);

View File

@ -25,11 +25,5 @@ console.error(module.paths.join('\n')+'\n');
var assert = require('assert');
assert.equal(require('bar'), require('../bar.js'));
// since this is inside a node_modules folder,
// it should be impossible to ever see /node_modules in the
// lookup paths, since it's rooted on the uppermost node_modules
// directory.
assert.equal(-1, module.paths.indexOf('/node_modules'));
// this should work, and get the one in ./node_modules/asdf.js
assert.equal(require('asdf'), require('./node_modules/asdf.js'));