/*模块分为两种:原生模块和文件模块。原生模块即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. 【转】MSSQLServer数据库事务锁机制分析

    锁是网络数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性.各种大型数据库所采用的锁的基本理论是一致的,但在具体实现上各有差别.目前,大多数数据库管理系统都或多或少具有自我调 ...

  2. 反射动态创建不同的Processor

    1. 定义抽象方法 public abstract class BaseProcesser    {        public abstract void GetCustomerReportCard ...

  3. 通过刷bios的方式在win8.1平板上启动windows phone模拟器

    最近买了个Windows8.1平板电脑,不是Surface Pro,太贵,而是国产的乐凡F2(64G.4G内存),CPU是赛扬U1037.最开始安装Visual Studio2013以及其他开发工具都 ...

  4. c3p0配置

    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN&q ...

  5. Struts2的基本流程的详细介绍

    Struts2基本流程 概述: Struts2框架由三部分构成:核心控制器.业务控制器和用户实现的业务逻辑组件.在这三部分中,struts2框架提供了核心控制器StrutsPrepareAndExec ...

  6. 微软开源的30个基础设施项目-C#

    .NET Compiler Platform ("Roslyn") .NET Core 5 .NET Micro Framework .NET SDK For Hadoop ASP ...

  7. Web控件文本框Reset的功能

    在前一篇中<怎样实现Web控件文本框Reset的功能>http://www.cnblogs.com/insus/p/4120889.html Insus.NET只实现了文本框的功能.单个或 ...

  8. Winform开发框架的重要特性总结

    从事Winform开发框架的研究和推广,也做了有几个年头了,从最初的项目雏形到目前各种重要特性的加入完善,是经过了很多项目的总结归纳和升华,有些则是根据客户需要或者应用前景的需要进行的完善,整个Win ...

  9. FL2440驱动添加(2): RTC(Real time clock)

    一,Linux下的时间分为两种,系统时间与硬件时间(RTC芯片): 1,系统时间就是运行系统能够直接看到的时间: 2,硬件时间就是RTC芯片中的时间,断电任然有电池供电: linux系统开机时,会从R ...

  10. 防止用户误操作退出APP的处理

    /** * 软件退出的处理:先跳到第一个页面,再点提示“再点一次退出”,2秒内再点一次退出 * 防止用户误操作 */ private boolean isExist=false; private Ha ...