[nodeJS篇]nodeJS之02-模块详解

原创 2017年01月03日 01:12:37

模块

编写稍大一点的程序时一般都会将代码模块化。在NodeJS中,一般将代码合理拆分到不同的JS文件中,每一个文件就是一个模块,而文件路径就是模块名。

在编写每个模块时,都有require、exports、module三个预先定义好的变量可供使用。

require

require函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。

导入外部模块的路径需要注意:

1)模块名可使用相对路径(以./开头)

不管所有文件在一个目录下还是不在一个目录下,./必须要写上.

2)模块的后缀可以省略

var foo1 = require('./foo');
var foo2 = require('./foo.js');

3)另外,可以使用以下方式加载和使用一个JSON文件。

var data = require('./data.json');

4)或者是绝对路径(以/或C:之类的盘符开头)

var data = require('C:/data.json');
var data = require('User/local/data.json');

exports

1)exports对象是当前模块的导出对象,用于导出模块公有方法和属性。

2)别的模块通过require函数使用当前模块时得到的就是当前模块的exports对象。

以下例子中导出了一个公有方法。

exports.hello = function () {
    console.log('Hello World!');
};

module

通过module对象可以访问到当前模块的一些相关信息,但最多的用途是替换当前模块的导出对象。例如模块导出对象默认是一个普通对象,如果想改成一个函数的话,可以使用以下方式。

module.exports = function () {
    console.log('Hello World!');
};

以上代码中,模块默认导出对象被替换为一个函数。

模块初始化

一个模块中的JS代码仅在模块第一次被使用时执行一次,并在执行过程中初始化模块的导出对象。之后,缓存起来的导出对象被重复利用。

主模块

通过命令行参数传递给NodeJS以启动程序的模块被称为主模块。主模块负责调度组成整个程序的其它模块完成工作。例如通过以下命令启动程序时,main.js就是主模块。

mian.js

var func = require('./count');
console.log(func.count());

count.js

var i = 0;
function count() {
  ++i;
  return i;
}
exports.count = count;

结果

liuyugang:nodeJS apple$ node man.js 
1
liuyugang:nodeJS apple$ 

二进制模块

虽然一般我们使用JS编写模块,但NodeJS也支持使用C/C++编写二进制模块。编译好的二进制模块除了文件扩展名是.node外,和JS模块的使用方式相同。虽然二进制模块能使用操作系统提供的所有功能,拥有无限的潜能,但对于前端同学而言编写过于困难,并且难以跨平台使用,因此不在本教程的覆盖范围内。

小结

本章介绍了有关NodeJS的基本概念和使用方法,总结起来有以下知识点:

NodeJS是一个JS脚本解析器,任何操作系统下安装NodeJS本质上做的事情都是把NodeJS执行程序复制到一个目录,然后保证这个目录在系统PATH环境变量下,以便终端下可以使用node命令。

终端下直接输入node命令可进入命令交互模式,很适合用来测试一些JS代码片段,比如正则表达式。

NodeJS使用CMD模块系统,主模块作为程序入口点,所有模块在执行过程中只初始化一次。

除非JS模块不能满足需求,否则不要轻易使用二进制模块,否则你的用户会叫苦连天。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

NodeJS无所不能:细数10个令人惊讶的NodeJS开源项目

摘要:NodeJS是一个服务器端JavaScript解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码...

NodeJS开源项目---很强大

1.NodeOS NodeOS是采用NodeJS开发的一款友好的操作系统,该操作系统是完全建立在Linux内核之上的,并且采用shell和NPM进行包管理,采用NodeJS不仅可以很好地进行包管...

【NodeJS】02.让我们开始接触已经开发好的模块: Express + Jade

还是先吐槽 昨天把iOS刷到了8,结果WhatsAPP死活都

NodeJs模块实例02_buffer、fs和fsdir

1.buffer模块实例 /* * * buffer:缓存器区,暂时存放在内存里的一段数据 * 由一个八位字节一个元素组成的数组,单位用16进制表示,取值范围0-255* * */   //创建buf...

NodeJS 模块开发及发布详解

NodeJS 是一门年轻的语言,扩展模块并不太全,经常我们想用某个模块但是却找不到合适的。比如前两天我需要使用hmac和sha1来做签名,就没有找到一个比较好用的模块,这时候就需要我们自己来实现相应的...

火星人学node(基础篇)---nodejs的模块系统(实例分析exprots和module.exprots)

前言:工欲善其事,必先利其器。模块系统是nodejs组织管理代码的利器也是调用第三方代码的途径,本文将详细讲解nodejs的模块系统。在文章最后实例分析一下exprots和module.exprots...

nodejs iconv-lite模块

  • 2017年09月22日 18:46
  • 231KB
  • 下载

NodeJs 几个npm模块

  • 2016年01月20日 22:32
  • 3.64MB
  • 下载

NodeJs学习笔记 02 -- Buffer

Buffer类 用于操作二进制数据流 Buffer类 是一个全局的类,是一个比较罕见的不需要 require(‘buffer’) 就可以使用的类。 new Buffer(size) 分配一个新的 ...
  • ym8023
  • ym8023
  • 2016年10月28日 13:54
  • 65
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[nodeJS篇]nodeJS之02-模块详解
举报原因:
原因补充:

(最多只允许输入30个字)