mirror of https://github.com/nodejs/node.git
Closes #1177 remove one node_modules optimization
to better support certain project structures.pull/5370/head
parent
88552c51ae
commit
39246f65df
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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'));
|
||||
|
|
Loading…
Reference in New Issue