看图知意:

注意事项:
第一,如果模块是目录,在模块目录中定义模块的文件必须被命名为 index.js,除非你在这个目录下一个叫 package.json 的文件里特别指明。要指定一个取代 index.js 的文件,package.json文件里必须有一个用 JavaScript 对象表示法(JSON)数据定义的对象,其中有一个名为 main 的键,指明模块目录内主文件的路径。如图:

下面是一个 package.json 文件的例子,它指定 currency.js 为主文件:
{
"main": "currency.js"
}
第二,Node 能把模块作为对象缓存起来。如果程序中的两个文件引入了相同的模块,第一
个 require 会把模块返回的数据存到内存中,这样第二个 require 就不用再去访问和计算模块
的源文件了。也就是说,在同一个进程中用 require 加载一个模块得到的是相同的对象。假设
你搭建了一个 MVC Web 应用程序,它有一个主对象 app。你可以设置好那个 app 对象,导出它,
然后在项目中的任何地方 require 它。如果你在这个 app 对象中放了一些配置信息,那你就可
以在其他文件中访问这些配置信息的值,假定目录结构如下所示:
project
app.js
models
post.js
下图展示了它的工作原理。

上图在 Web 程序中共享 app 对象
本文详细解析了Node.js中模块的加载方式,包括如何通过package.json文件指定模块的主文件,以及Node.js如何缓存模块对象,实现多次加载同一模块时的效率优化。并以MVC Web应用程序为例,说明了如何在项目中共享app对象。

1043





