From 39246f65dfb019ddebcc9db8d5cc776954e12129 Mon Sep 17 00:00:00 2001 From: Mathias Buus Date: Tue, 14 Jun 2011 00:42:06 +0200 Subject: [PATCH] Closes #1177 remove one node_modules optimization to better support certain project structures. --- doc/api/modules.markdown | 25 +------------------------ lib/module.js | 7 +------ test/fixtures/node_modules/baz/index.js | 6 ------ 3 files changed, 2 insertions(+), 36 deletions(-) diff --git a/doc/api/modules.markdown b/doc/api/modules.markdown index 5008f50..13e7949 100644 --- a/doc/api/modules.markdown +++ b/doc/api/modules.markdown @@ -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 diff --git a/lib/module.js b/lib/module.js index fa147d6..11c5189 100644 --- a/lib/module.js +++ b/lib/module.js @@ -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); diff --git a/test/fixtures/node_modules/baz/index.js b/test/fixtures/node_modules/baz/index.js index 44acc13..84f587f 100644 --- a/test/fixtures/node_modules/baz/index.js +++ b/test/fixtures/node_modules/baz/index.js @@ -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')); -- 2.7.4