Page 139 - Node.js开发指南
P. 139

132  第 6 章  Node.js 进阶话题


                 在本书的最后一章,我们打算讨论几个独立的话题,主要内容包括:
                   模块加载机制;
                   异步编程模式下的控制流;
                   Node.js 应用部署;
                   Node.js的一些劣势。

             6.1  模块加载机制


                 Node.js 的模块加载对用户来说十分简单,只需调用 require 即可,但其内部机制较为
             复杂。我们通过这一节简要介绍一下 Node.js 模块加载的一些细节,帮你减少开发中可能遇
             到的问题。

             6.1.1  模块的类型

                 Node.js  的模块可以分为两大类,一类是核心模块,另一类是文件模块。核心模块就是
             Node.js 标准 API 中提供的模块,如 fs、http、net、vm 等,这些都是由 Node.js 官方提供

             的模块,编译成了二进制代码。我们可以直接通过  require 获取核心模块,例如
             require('fs')。核心模块拥有最高的加载优先级,换言之如果有模块与其命名冲突,
             Node.js 总是会加载核心模块。
                 文件模块则是存储为单独的文件(或文件夹)的模块,可能是 JavaScript 代码、JSON 或
             编译好的 C/C++ 代码。文件模块的加载方法相对复杂,但十分灵活,尤其是和 npm 结合使
             用时。在不显式指定文件模块扩展名的时候,Node.js 会分别试图加上 .js、.json 和 .node扩展
             名。.js 是 JavaScript 代码,.json 是 JSON 格式的文本,.node 是编译好的 C/C++ 代码。
                 表 6-1总结了 Node.js 模块的类型,从上到下加载优先级由高到低。

                                       表6-1  Node.js 模块的类别和加载顺序
              核心模块                                                    内  建

              文件模块                        JavaScript                  .js
                                          JSON                        .json
                                          C/C++扩展                     .node

             6.1.2  按路径加载模块

                 文件模块的加载有两种方式,一种是按路径加载,一种是查找 node_modules 文件夹。

                 如果 require 参数以“ / ”开头,那么就以绝对路径的方式查找模块名称,例如 require
             ('/home/byvoid/module')  将会按照优先级依次尝试加载 /home/byvoid/module.js、
   134   135   136   137   138   139   140   141   142   143   144