在node.js里,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,我们可以将应用程序划分为各个不同的部分,并且对这些部分进行很好地协同管理。
1 Node.js框架中的核心模块与文件模块
每一个模块都是一个javascript脚本文件
node.js预定义的核心模块,在加载模块时,只需要将模块名指定为require函数即可
require('http')
在node.js中可以自己编写或从网上下载的以下几种模块文件:
- javascript文件
- JSON文件
- 后缀为.node的经过编译后的二进制模块文件
- 以上模块文件加载的时候需要完整路径及文件名
require('./scripts/foo.js')
2 从模块外部访问模块内的成员
- 在一个模块中定义的本地(即非函数内定义的)变量、函数或对象只在该模块内有效,当需要在外部使用时,需要在该模块文件内使用
exports对象
var myMsg = "hello";
var functionname = function () {
return "我是函数";
};
exports.msg = myMsg;
exports.functionname = functionname;
// 然后在外部引用
var foo = require('./foo.js');
console.log(foo.msg);
将模块定义为类
- 可以在模块文件内将
exports对象
写成module.exports
,但在需要将模块定义为一个类时,只能采用后者的书写方法
// foo.js var _name, _age; var name="", age=0; // 模块对象的构造函数 var foo = function(name, age) { _name = name; _age = age; } //获取私有变量_name的变量值 foo.prototype.GetName = function () { return _name; }; //设置私有变量_name的变量值 foo.prototype.SetName = function (name) { _name = name; }; // 获取私有变量_age的变量值 foo.prototype.GetAge = function () { return _age; }; // 设置私有变量_age的变量值 foo.prototype.SetAga = function () { _age = age; }; foo.prototype.name = name; foo.prototype.age = age; module.exports = foo; // 这是注释
- 在外部使用foo.js内的变量
var foo = require('./foo.js'); var myFoo = new foo("Tom", 40); // 新建模块对象 console.log(myFoo.GetName()); console.log(myFoo.GetAge()); myFoo.SetName("Bob"); myFoo.SetAge(30); console.log(myFoo.GetName()); console.log(myFoo.GetAge()); console.log(myFoo.name; console.log(myFoo.age);
- 可以在模块文件内将
为模块类定义类变量或类函数
- 相当于其他语言中的静态变量或静态函数,在node.js里称为类变量或类函数
3 组织与管理模块
- 从node_modules目录中加载模块
require('bar.js')
上例中的写法,node.js将视该文件为node_modules目录下的一个文件
使用目录来管理模块
- 在node.js中,可以将目录名指定为模块名,以方便可以通过目录来光流模块,只需要为该目录指定一个入口点
从全局目录中加载模块
- 若在操作系统里设置了NODE_PATH变量,并将变量值设置为一个有效的磁盘目录,当在require函数中只指定模块名,而没有指定模块文件的路径,且node.js从其他路径中寻找不到需要被加载的模块文件时,Node.js将从NODE_PATH变量所指的磁盘目录中寻找并加载该模块文件。
4 模块对象的属性
- 在模块文件内部,可以访问当前模块如下一些属性:
module.id
,属性值为当前模块的IDmodule.loaded
,属性值为布尔值,false:模块尚未加载完毕module.parent
,属性值为当前模块的父模块module.children
, 属性值为一个数组,存放当前模块的所有子模块对象
5 包与npm包管理工具
node.js中的包
在Node.js中可以通过包来对一组具有相互依赖关系的模块进行管理,通过包的使用,可以将某个独立的功能封装起来
在node.js中一个包事实上是一个目录,其中包含了用于对包进行描述的package.json,一个包中,通常包含如下所示的一些内容:
- 在包根目录中存放的package.json
- 在bin子目录中存放二进制文件
- 在lib子目录中存放javascript文件
- 在doc子目录存放对包或包的使用方法进行说明的文档文件
- 在test子目录中存放一些对包进行单元测试用的文件
在一个package.json文件中,通常包含如下字段:
- name: 包名,唯一
- preferglobal: 是否支持全局安装;true:支持全局安装;
- description: 包说明,对包进行简要描述
- version: 版本号
- author
- maintainers:包维护者信息数组
- bugs: bug提交地址
- licenses: 许可证数组
- repository
- keywords
- dependencies
npm包管理工具
- 在Node.js中提供了一个npm(Node Package Manage)包管理工具
- 使用npm可从第三方网站上下载Node.js包
结语
没有结语!