Node.js模块定义总结
2016-06-21 09:53
651 查看
为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。
Node.js 提供了exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。
一模块对外部需要暴露什么样的接口,都是在定义时决定的。
在模块创建时,我们可以使用exports和module.exports两个方法来暴露接口。大多数时刻,使用两者是等同的,但也有细微的区别 。区别如下:
由于
关于node的模块定义有几种不同的写法,大致总结如下:
调用方式为:
这种方式可以用于返回一些全局共享的常量或者变量。
调用方式为:
exp.js.js
调用方法为
调用方法.
调用方法.
以及
以上是总结的几种定义模块的方式。
Node.js 提供了exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。
一模块对外部需要暴露什么样的接口,都是在定义时决定的。
在模块创建时,我们可以使用exports和module.exports两个方法来暴露接口。大多数时刻,使用两者是等同的,但也有细微的区别 。区别如下:
exports是指向的
module.exports的引用;
module.exports初始值为一个空对象
{},所以
exports初始值也是
{};
require()返回的是
module.exports而不是
exports。
由于
exports是指向的
module.exports的引用,所以,当我们想让模块导出的是一个对象时,
exports和
module.exports均可使用(但
exports也不能重新覆盖为一个新的对象),而当我们想导出非对象接口时,就必须也只能覆盖
module.exports。
关于node的模块定义有几种不同的写法,大致总结如下:
返回一个JSON Object
如下代码是一个简单的示例。exp.js:
var exp = { "name": "jeri", "age": 25, "email":"test@test.com"l, }; module.exports = exp;
调用方式为:
app.js:
var exp = require("./exp"); console.log(exp.name);
这种方式可以用于返回一些全局共享的常量或者变量。
为一个模块,暴露几个方法。
如下,通常可以返回几个函数:exp.js :
var func1 = function() { console.log("func1"); }; var func2 = function() { console.log("func2"); }; exports.function1 = func1; exports.function2 = func2;
调用方式为:
app.js:
var functions = require("./exp"); functions.function1(); functions.function2();
返回一个构造函数,也就是一个类
示例如下:exp.js.js
var MyClass = function(args) { this.args = args; }; MyClass.prototype.func = function() { console.log(" MyClass.func"); console.log(this.args); }; module.exports = MyClass;
调用方法为
app.js
var MyClass = require("./MyClass"); var example = new MyClass("arguments");
返回一个普通函数
如下是一个简单的示例.exp.js
var func = function() { console.log("this is a testing function"); }; module.exports = func;
调用方法.
app.js
var func = require("./exp"); func();
返回一个对象object
如下是一个简单的示例exp.js
var MyClass = function() { this.sayHello = "hello"; }; MyClass.prototype.func = function() { console.log("I say " + this.sayHello); }; module.exports = new MyClass();
调用方法.
app.js
var obj = require("./MyClass"); obj.func();
有时候我们需要模块返回一个单例 singleton. 可以利用上面的方式1和方式4来实现。也就是如下两种形式:
app.js
var MATH = { "pi": 3.14, "e": 2.72, }; module.exports = MATH;
以及
var CLASS = function() { this.sayHello = "hello"; }; CLASS.prototype.func = function() { console.log("I say " + this.sayHello); }; module.exports = new CLASS();
以上是总结的几种定义模块的方式。
相关文章推荐
- node环境
- node应用线上部署时锁定包的依赖版本
- Nodejs与Python脚本语言混编
- when 让你跳出异步回调噩梦 node.js下promise/A规范的使用
- node.js 下使用 util.inherits 来实现继承
- 使用node-livereload自动刷新页面
- nodejs 字符串转gbk base64
- Node.js 异步异常的处理与domain模块解析
- Nodejs-Koa是一个干净的框架
- 使用nodewebx进行前后端开发环境分离
- Nodejs学习之一 下载安装与部署nodejs
- NodeMCU教程 不断重启问题解决
- NodeMCU文档中文翻译 5 上传代码
- NodeMCU文档中文翻译 4 烧写固件
- Ionic_1.x 全套配置搭建开发环境教程(nodejs,jdk,androidsdk)
- NodeMCU文档中文翻译 3 构建固件
- node.js安装cnpm 提高下载速度
- NodeMCU文档中文翻译 2 首页
- NodeMCU文档中文翻译 1 概要
- StatsD的使用及Java和NodeJS客户端的调用