从 node_modules 目录加载
如果传给 require()
的模块标识符不是核心模块,并且不以 '/'
、'../'
或 './'
开头,则 Node.js 从当前模块的目录开始,并添加 /node_modules
,并尝试从该位置加载模块。
Node.js 不会将 node_modules
附加到已经以 node_modules
结尾的路径。
如果在那里找不到它,则它移动到父目录,依此类推,直到到达文件系统的根目录。
例如,如果 '/home/ry/projects/foo.js'
处的文件调用 require('bar.js')
,则 Node.js 将按以下顺序查找以下位置:
/home/ry/projects/node_modules/bar.js
/home/ry/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js
这允许程序本地化它们的依赖项,这样它们就不会发生冲突。
通过在模块名称后包含路径后缀,可以要求与模块一起分发的特定文件或子模块。
例如,require('example-module/path/to/file')
将相对于 example-module
所在的位置解析 path/to/file
。
后缀路径遵循相同的模块解析语义。
If the module identifier passed to require()
is not a
core module, and does not begin with '/'
, '../'
, or
'./'
, then Node.js starts at the directory of the current module, and
adds /node_modules
, and attempts to load the module from that location.
Node.js will not append node_modules
to a path already ending in
node_modules
.
If it is not found there, then it moves to the parent directory, and so on, until the root of the file system is reached.
For example, if the file at '/home/ry/projects/foo.js'
called
require('bar.js')
, then Node.js would look in the following locations, in
this order:
/home/ry/projects/node_modules/bar.js
/home/ry/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js
This allows programs to localize their dependencies, so that they do not clash.
It is possible to require specific files or sub modules distributed with a
module by including a path suffix after the module name. For instance
require('example-module/path/to/file')
would resolve path/to/file
relative to where example-module
is located. The suffixed path follows the
same module resolution semantics.