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
   135   136   137   138   139   140   141   142   143   144   145