《Node.JS开发指南》NodeJs中的模块与文件
发布于 2年前 作者 douya0808 1701 次浏览

今天复习《Node.JS开发指南》发现有个小知识点我没有弄明白,我给前辈们截出来

模块与文件一一对应。文件不仅可以是JavaScript代码或二进制代码,还可以是一个文件夹。最简单的包,就是一个作为文件夹的模块。下面我们来看一个例子,建立一个叫做somepackage的文件夹,在其中创建index.js//somepackage/index.js
exports.hello=function(){
   console.log('Hello.');
};
         然后在somepackage之外建立getpackage.js,内容如下:
//getpackage.js
var somePackage=require('./somepackage');
somePackage.hello();
         运行node getpackage.js,控制台将输出结果Hello。

为什么不是写作var somePackage=require(‘./somepackage/index’);呢?如果一个文件夹下面有一个文件(模块),那么引入这个文件夹就相当于引入了这个文件夹下的文件(模块)了吗?这样作有什么用意吗?

4 回复

因为我的理解是每个文件(模块)中都会有各自的exports对象作为暴露自身内容的接口,可是如果一个文件夹下有多个文件,那require这个文件夹获得的是哪个文件(模块)中的exports呢?还是说一个文件夹下只能放一个文件(模块)呢?这样就没有冲突了

还是说不管文件夹下有多少文件,默认只加载index.js中的exports对象呢?我试验后是这个结果,但还是不理解为啥要按文件夹加载

首先一个文件夹下面可以有任意个文件(module),你可以通过相应的路径来引用这些module,路径指定的是哪个module,引用的就是哪个module。而如果没有指定module名,默认会去找index。

一般可重用的第三方包会提供一个index module作为整个包的统一入口。比如你写了一个包myPackage,在包的根目录下有两个模块:module1, module2, 那么index.js可以这样写:

exports.module1 = require('./module1');
exports.moduel2 = require('./moduel2');

将index作为入口,将你想要公开的接口exports出来,当然,用户还是可以直接require你的内部module,只是大家一般不这么做。

具体的module机制,请仔细阅读官方文档: http://nodejs.org/api/modules.html

试验了下还真的是这样 谢谢前辈 以后我注意多看官方文档

回到顶部