[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开源项目---很强大

1.NodeOS NodeOS是采用NodeJS开发的一款友好的操作系统,该操作系统是完全建立在Linux内核之上的,并且采用shell和NPM进行包管理,采用NodeJS不仅可以很好地进行包管...
  • zzzkk2009
  • zzzkk2009
  • 2013年12月17日 10:27
  • 2426

nodejs的安装和使用

一 下载 下载地址: https://nodejs.org/download/ 二 安装 1 win7系统直接双击,就可以运行了; 2 win8需要使用管理员权限运行,否则会报错Error 250...
  • xufeng0991
  • xufeng0991
  • 2015年03月16日 21:32
  • 729

nodejs综合

me14.info/api/bfzx    chihuo有登陆和跳转到从数据库抓取信息 仿造一个good表和/item 从数据库抓取信息  可能使用json数据   NJBlog-m...
  • batmannolove
  • batmannolove
  • 2015年12月30日 17:01
  • 84

nodeJs之path模块

注意:cmd+左键,点击模块名,进入模块声明部分 导入系统的模块path,用于对文件路径进行处理...
  • my_study_everyday
  • my_study_everyday
  • 2016年10月17日 22:00
  • 624

NodeJs之TypeScript开发环境--VS Code

NodeJs的开发中可以使用TypeScript。 本文介绍在NodeJs项目中使用TypeScript,VSCode已经支持TypeScript的编辑编辑等功能。 方式一:使用VS Code ...
  • u011127019
  • u011127019
  • 2017年07月04日 11:37
  • 2188

微信小程序:nodejs+百度语音识别开发实践

今天,终于成功使用nodejs研究出百度语音识别了。目前使用小程序最新录音管理api测试,小程序录音只支持aac,mp3格式,并且保持的是临时地址。而百度语音识别目前只支持pcm,wav,amr格式。...
  • eadio
  • eadio
  • 2018年01月08日 15:49
  • 607

Apache Notes

修改Apache 默认字体 修改或增加httpd.conf配置文件DefaultLanguage zh-cnAddDefaultCharset gd2312...
  • hhcjb
  • hhcjb
  • 2010年07月08日 14:45
  • 232

CommonJS模块规范与NodeJS的模块系统底层原理

但在了解NodeJS模块之前 首先来科普一下什么是CommonJSCommonJS规范它为JavaScript制定一套规范——希望JavaScript能在任何地方运行 使其具备开发大型应用的能力出...
  • q1056843325
  • q1056843325
  • 2017年02月09日 14:33
  • 1270

nodejs--promise之Q模块

Q实现promise的常用方法有7个,在不同情况下使用不同的方法,下面就一一来介绍:------------低-----调-----的-----分-----割-----线---------------...
  • qq_36453032
  • qq_36453032
  • 2017年06月20日 13:06
  • 1018

Node入门(nodejs中文教程)

  • 2013年08月26日 10:07
  • 379KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[nodeJS篇]nodeJS之02-模块详解
举报原因:
原因补充:

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