nodejs中exports与module.exports的区别

node中exports模块对象相信大家一定不陌生;

如studentModule.js:

exports.student = function() {
     console.log("this is student module!");
}

在另一个模块中这样引用:

var student = require(‘./studentModule.js‘);
student.student(); // this is student module!

那么问题来了:module.exports是什么呢?

其实,Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。

我们修改一下studentModule.js

module.exports = "student module";
exports.student = function() {
    console.log("this is student module!");
}

我们在另一个js文件中引入这个模块(这里引入的js文件属于同级引入)

var student = require("../studentModule.js");
student.student(); // TypeError: Object student module! has no method ‘student‘

结果报错了;这里的报错信息指的是对象student module!没有student这个方法。

student模块忽略了exports收集的student方法,返回了一个字符串"student module"。由此可知,你的模块并不一定非得返回“实例化对象”。你的模块可以是任何合法的javascript对象--boolean, number, date, JSON, string, function, array等等。

你的模块可以是任何你设置给它的东西。如果你没有显式的给Module.exports设置任何属性和方法,那么你的模块就是exports设置给Module.exports的属性。

下面举个栗子,假设你是模块是一个类 person.js:

module.exports = function(name, age) {
    this.name = name;
    this.age = age;
    this.about = function() {
        console.log("name: " + this.name +‘ age:  ‘+ this.age );
    };
};

在另一个模块中这样引入使用:

var Person = require(‘./person.js‘);
var person = new Persion("小明", 12);
person.about(); //name: 小明 age: 12

如果你的模块是一个数组arr.js:

module.exports = ["apple", "banana", "orange"];

在其他模块中引入:

var arr = require("./arr.js");
for(var i = 0; i < arr.length; ;i++) {
    console.log(arr[i]);
}
//结果输出:apple,banana,orange

如果你想你的模块是个特定的类型就用 Module.exports如果你想你的模块是实例化对象就用exports。

module.exports是真正的接口,exports只不过是它的辅助接口。推荐使用exports导出;除非你打算从原来的“实例化对象”改变成一个类型。

参考:http://www.cnblogs.com/pigtail/archive/2013/01/14/2859555.html

原文:http://www.hacksparrow.com/node-js-exports-vs-module-exports.html

时间: 2024-08-06 07:59:12

nodejs中exports与module.exports的区别的相关文章

nodejs模块中exports和module.exports的区别

通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名')去获取:核心模块具有最高的加载优先级(有模块与核心模块同名时会体现) 文件模块访问方式通过require('/文件名.后缀') require('./文件名.后缀') requrie('../文件名.后缀') 去访问,文件后缀可以省略:以"/"开头是以绝对路径去加载,以"./"开头

深入理解nodejs 中 exports与module.exports

在Javascript 中,有2种作用域,分为 全局作用域 ,和函数作用域, 在 浏览器端 , 全局作用域 就是 window对象的属性, 函数作用域 就是 ,某个 函数 生成的对象的属性: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script> var name

nodejs exports与module.exports的区别

exports和module.exports的作用都是将文件模板的方法和属性暴露给require返回的对象进行调用.但是两者有本质的区别,exports的属性和方法都可以被module.exports替代. 如下代码是一样的: exports.name='iwang' module.exports.name = 'iwang' 但是exports不能替代module.exports的方法,所有的exports对象最终都是通过module.exports传递执行的.可以理解exports是给mod

Node.js中exports与module.exports的区别

原文:http://www.hacksparrow.com/node-js-exports-vs-module-exports.html 你肯定对Node.js模块中用来创建函数的exports对象很熟悉(假设一个名为rocker.js的文件): exports.name = function() { console.log('My name is Lemmy Kilmister'); }; 然后你在另一个文件中调用: var rocker = require('./rocker.js'); r

node.js模块中exports和module.exports的区别

Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文件不可见. CommonJS规范规定,每个模块内部,module变量代表当前模块.这个变量是一个对象,它的exports属性(即module.exports)是对外的接口.加载某个模块,其实是加载该模块的module.exports属性. var x = 5; var addX = function (value) { return

nodeJS exports – exports vs module.exports

require, exports, module.exports 区别: require 用来加载代码(模块),而 exports 和 module.exports 则用来导出代码. exports 是指向的 module.exports 的引用 module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {} require() 返回的是 module.exports 而不是 exports nodejs中exports与module.exports的区别: Mo

node.js module初步理解,exports与module.exports的区别

在开发一个复杂的应用程序的时候,我们需要把各个功能拆分.封装到不同的文件,在需要的时候引用该文件.没人会写一个几万行代码的文件,这样在可读性.复用性和维护性上都很差,几乎所有的编程语言都有自己的模块组织方式,比如Java中的包.C#中的程序集等,node.js使用模块和包来组织,其机制实现参照了CommonJS标准,虽未完全遵守,但差距不大,使用起来非常简单. 在node.js中模块与文件是一一对应的,也就是说一个node.js文件就是一个模块,文件内容可能是我们封装好的一些JavaScript

exports 和 module.exports 的区别

我理解的exports 和 module.exports 的区别,欢迎大家吐槽~ 为了更好的理解 exports 和 module.exports 的关系,我们先来补点 js 基础.示例: app.js var a = {name: 'nswbmw 1'}; var b = a; console.log(a); console.log(b); b.name = 'nswbmw 2'; console.log(a); console.log(b); var b = {name: 'nswbmw 3

node.js中的exports和module.exports

不同的编程语言都有各自的代码组织和复用的方式,如.net.php中的命名空间,python中的import,ruby中的module等,来避免命名空间污染.一直都没搞清楚node中的exports和module.exports的区别,借此搞清楚node的代码模块复用方式. 首先怎么创建node中的modules. 可以直接创建一个文件作为module,如下module.js function writeLine(){ console.log("module.js"); } export