node-modules

1.什么是模块(modules)?

在node.js中模块与文件是一一对应的,也就是说一个node.js文件就是一个模块,文件内容可能是我们封装好的一些JavaScript方法、JSON数据、编译过的C/C++拓展等,在 关于node.js的误会提到过node.js的架构。其中http、fs、net等都是node.js提供的核心模块,使用C/C++实现,外部用JavaScript封装。
 
怎么使外部访问这个module,我们知道客户端的JavaScript使用script标签引入JavaScript文件就可以访问其内容了,但这样带了的弊端很多,最大的就是作用域相同,产生冲突问题,以至于前端大师们想出了立即执行函数等方式,利用闭包解决。node.js使用exports和require对象来解决对外提供接口和引用模块的问题。

1、将函数作为模块的方法导出:

var printName=function(name){
        console.log(name);
};
exports.printName=printName;

module.exports才是模块公开的接口,每个模块都会自动创建一个module对象,对象有一个exports的属性,初始值是个空对象{}。而exports只不过是module.exports的一个辅助工具。请求加载模块时最终返回给调用的是moudle.exports而不是exports。关系:

exports = module.exports = {};

 所以exports 和 module.exports 的区别:

1. exports 是指向的 module.exports 的引用;

2.module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {};

3.require() 返回的是 module.exports 而不是 exports;

4.是Module.exports本身不具备任何属性和方法,如果,Module.exports已经具备一些属性和方法,那么exports对象收集来的信息将被忽略。因为Module.exports通过赋值的 方式已经和exports指向的内存不同了。

关于使用场合:如果想把模块作为一个特定的类型就用Module.exports。如果你想你的模块是一个典型的“实例化对象”就用exports。

 

require搜索module方式

node.js中模块有两种类型:核心模块和文件模块,核心模块直接使用名称获取,比如最长用的http模块

var http=require('http');

 

在上面例子中我们使用了相对路径 './test'来获取自定义文件模块,那么node.js有几种搜索加载模块方式呢?

  1. 核心模块优先级最高,直接使用名字加载,在有命名冲突的时候首先加载核心模块
  2. 文件模块只能按照路径加载(可以省略默认的.js拓展名,不是的话需要显示声明书写)
    1. 绝对路径
    2. 相对路径
    3. 客户端加载node_modules里面的模块
  3. https://yq.aliyun.com/ziliao/52455

转载于:https://www.cnblogs.com/aprilgirl/p/8759496.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值