Page 140 - Node.js开发指南
P. 140
6.1 模块加载机制 133
/home/byvoid/module.json 和 /home/byvoid/module.node。 1
如果 require 参数以“ ./ ”或“ ../ ”开头,那么则以相对路径的方式来查找模块,
这种方式在应用中是最常见的。例如前面的例子中我们用了require('./hello')来加载
同一文件夹下的hello.js。
2
6.1.3 通过查找 node_modules 目录加载模块
如果require参数不以“ / ”、“ ./ ”或“ ../ ”开头,而该模块又不是核心模块,那么就
要通过查找 node_modules 加载模块了。我们使用npm获取的包通常就是以这种方式加载的。 3
在某个目录下执行命令npm install express,你会发现出现了一个叫做node_modules
的目录,里面的结构大概如图 6-1 所示。
4
5
6
7
图6-1 node_modules 目录结构 8
在 node_modules 目录的外面一层,我们可以直接使用 require('express') 来代替
require('./node_modules/express')。这是Node.js模块加载的一个重要特性:通过查
找 node_modules 目录来加载模块。
9
当 require 遇到一个既不是核心模块,又不是以路径形式表示的模块名称时,会试图
在当前目录下的 node_modules 目录中来查找是不是有这样一个模块。如果没有找到,则会
在当前目录的上一层中的 node_modules 目录中继续查找,反复执行这一过程,直到遇到根
目录为止。举个例子,我们要在 /home/byvoid/develop/foo.js 中使用 require('bar.js') 命 10