/*模块分为两种:原生模块和文件模块。原生模块即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. Lucene-Analyzer

    Lucene文本解析器实现 把一段文本信息拆分成多个分词,我们都知道搜索引擎是通过分词检索的,文本解析器的好坏直接决定了搜索的精度和搜索的速度. 1.简单的Demo private static fi ...

  2. sql分页存储过程

    ALTER PROCEDURE [dbo].[P_SplitPagesQuery] @TablesName NVARCHAR(MAX),--表名或视图名(只能传单一表名) @PK NVARCHAR(M ...

  3. 适用于jquery1.11.1的ajaxfileupload.js

    ajaxfileupload源码 解决上传成功不走success的问题 解决高版本jquery兼容性问题 jQuery.extend({ createUploadIframe: function(id ...

  4. 转帖一篇sixxpack破解的文章!

    星期天闲着没事玩游戏,玩游戏不能无外挂.于是百度了半天,找到了一个,看介绍貌似不错,就下载了下来.一看,竟然是用.net写的,下意识地Reflector了一下.发现竟是一个叫actmp的程序集.如图: ...

  5. The type java.util.Map$Entry cannot be resolved. It is indirectly referenced。。.相似的错误

    这个问题是出现一般都是因为JDK版本的问题.今天公司安装NC的时候就出现了这个问题.经过对错误的分析和猜测,将JDK从1.8i换成了1.7,之后就行了.根据我个人的猜测,可能是1.8以后就不支持Map ...

  6. HTML页面放大镜效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. python peewee.ImproperlyConfigured: MySQLdb or PyMySQL must be installed.

    最近在学习Python,打算先看两个在线教程,再在github上找几个开源的项目练习一下,在学到“被解放的姜戈”时遇到django同步数据库时无法执行的错误,记录一下. 错误现象: 执行python ...

  8. 媲美oracle awr/statspack的mysql awr第一版发布

    现发布alpha版mysql awr,其提供的特性类似于oracle awr或statspack+集中式监控.对于原来从事oracle dba或者相关运维的人原来说,这会是个不错的选择. 至于我为什么 ...

  9. ArrayList等常见集合的排序问题

    对于ArrayList等常用的集合具体业务类,基本上都实现了Comparable接口,即可以用来比较装载的对象实体. 主要用Collections.sort方法对集合类中的对象进行排序 Collect ...

  10. docker入门指南(转载)

    原文: http://bg.biedalian.com/2014/11/20/docker-start.html 关于 docker 今天云平台的同事提到, 现在的运维就是恶性循环, 因为大家都在申请 ...