在Node.js中,以模块为单位划分所有功能。每一个模块都是一个Javascript脚本文件。
4.2 从模块外部访问模块内部的成员
4.2.1 使用exports 对象
var myMsg = 'hello'
var funcname = function() {
return 'i am funcname1 function'
}
exports.msg = myMsg
exports.funcname = funcname
var foo = require('./chapter-4/foo')
console.log(foo.msg)
console.log(foo.funcname())
4.2.2 将模块定义为类
也可以在模块文件内将 exports对象书写为 “module.exports” ,
var _name;
var name = '初始值'
// 模块对象的构造函数
var foo = function(name) {
_name = name
}
// 获取私有变量_name的变量值
foo.prototype.GetName = function() {
return _name
}
// 设置私有变量_name的值
foo.prototype.SetName = function(val) {
_name = val
}
foo.prototype.name = name
module.exports = foo
var foo = require('./chapter-4/foo-class.js')
var myFoo = new foo("Tom") // 新建模块对象
console.log(myFoo.GetName())
myFoo.SetName('Gemma')
console.log(myFoo.GetName())
// 获取模块对象内的name公有变量值
console.log(myFoo.name)
4.2.3 为模块类定义类变量和类函数
// ...续上面
foo.staticName = '' // 定义类变量
// 定义类函数
foo.staticFunction = function() {
console.log(foo.staticName)
}
module.exports = foo
// 类变量
foo.staticName = '静态变量'
foo.staticFunction()
4.3 组织与管理模块
4.3.1 从node_modules目录中加载模块
/home/ry/project/app.js
require('bar.js')
加载的路径依次为
- /home/ry/projects/node_modules/bar.js
- /home/ry/node_modules/bar.js
- /home/node_modules/bar.js
- /node_modules/bar.js
4.3.2 使用目录来管理模块
1)就是平常见到的在目录下建 index.js 文件,require('bar') 就会默认加载bar目录下面的
index.js
- 在应用程序根目录下的node_modules 子目录的 bar目录下创建一个package.json文件
"name": "foo",
"main": "./lib/bar.js"
require('bar')
4.4 模块对象的属性
- module.id 当前模块的ID。默认情况下,主模块的ID 属性值为“.”,其他模块的ID属性值为该模块文件的绝对路径。在模块文件中可以修改当前模块的ID属性值
console.log(module.id)
module.id="foo"
console.log(module.id)
-
module.filename 当前模块文件的文件名
image.png - module.loaded 模块是否加载完毕
- module.parent 当前模块的父模块对象,即调用当前模块的模块对象
- module.children 属性为一个数组,为当前模块中已加载的所有模块对象
4.5 Node.js中的包
在Node.js中,一个包事实上是一个目录,通常包含如下内容:
1) package.json 其中包含了用于对包进行描述的JSON格式的文件。
- 在bin子目录中存放二进制文件
3)在lib子目录中存放Javascript文件
4)在doc子目录存放对包或包的使用方法进行说明的文档文件
5)在test子目录中存放一些对包进行单元测试用的文件
package.json 通常包含的字段
1)name
- preferglobal 是否支持全局安装
3)bugs bug的提交地址
4)keywords 关键字数组,通常用于搜索
网友评论