/*模块分为两种:原生模块和文件模块。原生模块即Node.js API提供的原生模块,原生模块在启动时已经被加载。文件模块即为动态加载模块,加载文件
模块的工作主要由原生模块 module 来实现和完成。原生模块在启动时已经加载,文件模块则需要通过调用Node.js 的 require 方法来实现加载。
Node.js会对原生模块和文件模块都进行缓存,因此在第二次require该模块时,不会有重复的开销去加载模块,只需要从缓存中读取相应模块数据即可。

Node.js如何处理模块
Node.js中原生模块和文件模块的调用方法存在一定的区别,但是二者的应用大同小异。

1.原生模块的调用
应用Node.js提供的API require来加载相应的Node.js模块,require加载成功后会返回一个Node.js模块的对象,该对象拥有的所有属性和方法,例如:
var httpModule = require('http');//require http模块
http:HTTP时Node.js提供的原生模块,该模块中有createServer、request和get等多个方法和属性,这些都可以在API文档中查找到
httpModule:则require原生HTTP模块后返回的对象,通过该对象可以调用HTTP模块的所有方法和方法。
httpModule.creatServer(function(res,req){}).listen(port)//调用httpModule的对象方法
httpModule对象调用了HTTP模块中的createServer和lister方法来创建简单的http服务器

2.文件模块调用方法
文件模块的调用和原生模块的调用方式基本一致,但是需要注意的是,原生模块的加载不需要指定模块的路径,而文件模块加载时必须指定文件路径
否则会出现"can not find XX module"。
var test = require('/path/.../test.js')也可以var test = require('/path/.../test')
/path/.../test.js:代表test文件模块的绝对路径,如果需要使用相对路径,则需要在路径前加一个"./",例如require('./test.js')
/path/.../test.js也可以省略js后缀名
test返回值:require加载模块成功后返回的同样也是一个对象
在得到require返回对象test以后,那么该test对象可以调用文件模块的那些属性和方法呢?Node.js中明确指出,在文件模块中,只有express和
module.express对象暴露给该外部的属性和方法,才能够通过返回的require对象进行调用,其他方法和属性是无法获取的,因此test对象只能调用
test.js文件模块中的exports和module.exports的方法和属性。例如test.js中的love方法和yourName属性不能通过返回test对象进行调用,而由于
name属性和exports暴露给调用者,因此二者可以通过test对象访问。

*/
exports.name = "xiao er";
exports.happy = function(){
    console.log("mm");
};
var yourName = "reader";
function love(){
    console.log("mm vs gg")
}

/*
test对象可见属性和方法:只有name属性和happy方法是通过调用exports,因此对于require加载模块后返回对于require加载模块返回后的test
对象来说,其可见方法和属性只有name和happy。
test对象不可见属性和方法:yourName属性和love方法由于没有调用exports,返回暴露给外部调用者,因此对require返回烦人对象test是不可见
的,这点类似于类的私有成员和私有方法。

我们通过代码打印出来的require后的test对象信息,查看其拥有的属性和方法。

由此看来,仅有exprots和module.exprots的方法和属性是可见的。
*/

Nde模块篇的更多相关文章

  1. Arduino 各种模块篇 摇杆模块

    Arduino的另外几种模块,我们常见的joystick摇杆模块. 用起来很爽,摇杆 有X,Y轴可调 这里有一篇非常想尽的示例代码: http://www.geek-workshop.com/foru ...

  2. python之常用模块篇5

    一.日志模块,logging模块 1)logging模块简单使用,屏幕输出.默认级别30 import logging logging.debug( logging.info( logging.war ...

  3. Python之模块篇

    简介 你已经学习了如何在你的程序中定义一次函数而重用代码.如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块.模块基本上就是一个包含了所有你定义的函数和变量的 ...

  4. Arduino 各种模块篇 蓝牙模块 手机蓝牙控制Arduino LED灯

    解决方案. 条件: 1.手机android 商店下载 blueTerm 2.向arduino中载入如下代码: char val; ; void setup() { Serial.begin(); pi ...

  5. AngularJS高级程序设计读书笔记 -- 模块篇

    一. 模块基础 1. 创建模块 <!DOCTYPE html> <html ng-app="exampleApp"> <head> <ti ...

  6. Nodejs的运行原理-模块篇

    前言 使用Nodejs,就不可避免地引用第三方模块,它们有些是Nodejs自带的(例:http,net...),有些是发布在npm上的(例:mssql,elasticsearch...) 本篇章聚焦3 ...

  7. nodejs笔记--模块篇(三)

    文件模块访问方式通过require('/文件名.后缀')    require('./文件名.后缀')    requrie('../文件名.后缀') 去访问,文件后缀可以省略:以"/&qu ...

  8. python 学习分享-常用模块篇

    模块 就是前人给你造的轮子,你开车就好!!! 常用模块有: time模块 random模块 os模块 sys模块 shutil模块 json  &  picle模块 shelve模块 xml处 ...

  9. 二、Ansible基础之模块篇

    目录 1. Ansible Ad-Hoc 命令 1.1 命令格式 1.2 模块类型 1.3 联机帮助 1.3.1 常用帮助参数 1.4 常用模块 1.4.1 command & shell 模 ...

随机推荐

  1. SQL Server里PIVOT运算符的”红颜祸水“

    在今天的文章里我想讨论下SQL Server里一个特别的T-SQL语言结构——自SQL Server 2005引入的PIVOT运算符.我经常引用这个与语言结构是SQL Server里最危险的一个——很 ...

  2. QCustomplot使用分享(五) 布局

    一.历史对比 关于QCPLayoutElement这个元素的讲解之前,我想先对1.3.2release版本和2.0.0beta版本的该元素做以简单的对比介绍,首先,1.3.2release版本时,鼠标 ...

  3. 【分享】iOS功能界面漂亮的弹出框

    STPopup 为 iPhone 和 iPad提供了 STPopupController UINavigationController 弹出的风格. 特性: Extend your view cont ...

  4. 《构建之法》第8、9、10章读书笔记、读后感以及Sprint1总结

    第八章:需求分析 软件需求 人们(用户)的需求五花八门,作为一个软件团队要准确而全面地获取这些需求主要有以下四个步骤: 获取和引导需求.这一步骤也被叫做“需求捕捉”.软件团队需要为用户着想,设身处地, ...

  5. Azure开发者任务之六:使用WCF Service Web Role

    在本文中,我们将会在local development fabric上创建一个WCF服务角色,然后在一个控制台应用程序中使用它. WCF服务角色可以让我们创建一个WCF服务,并且把它托管在Window ...

  6. WPF 程序自删除(自毁)|卸载程序删除

    一般是在MainWindow_Closed 事件中调用批处理命令删除. 在借鉴别人的想法的基础上的算是改进. 自删除步骤: 1.删除文件 2.删除存放文件夹. 实现代码: private static ...

  7. python面向对象(一),Day6

    connfigparser模块 xml模块 shutil模块以及压缩解压 subprocess模块 面向对象(上) 类和对象 onfigParser 用于对特定的配置进行操作,当前模块的名称在 pyt ...

  8. ahjesus根据身份证号码获取相关信息(生日,省市县,性别)

    使用说明: //出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢! var idCard = new IdCard();var msg = ...

  9. [Redis] redis-cli 命令总结

    Redis提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些command可以在Linux终端使用.在编程时,比如使用Redis 的Java语言包,这些命令都有对应的方法.下面将R ...

  10. Python参数组合

    参数定义的顺序必须是:①必选参数.②默认参数.③可选参数.④命名关键字参数.⑤关键字参数 #a,b为必选参数:c为默认参数:args为可变参数:kw为关键字参数 def f1(a,b,c=0,*arg ...