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");
}
exports.dbleNum=function(num){
return num*2;
}
exports.tripleNum=function(num){
return num*3;
}

其中,我们exports两个函数,在example.js文件中(如下),我们可以利用require就能取得这两个函数


var module = require(‘./module‘);
console.log(module.dbleNum(3));
console.log(module.tripleNum(3));

这样就可以用module.js中的函数了。其中./表示这模块和当前的调用模块在同一目录下,若是放在子目录lib下面,就是require(‘./lib/module‘),不需要后缀.js的。

当然这是简单的单个文件的模块,如果是比较复杂的可以以包的形式,也即n像pm安装的包那样子。如上module.js文件,我们将其放在example_module文件夹下,里面新建一个package.json文件(这是是包的主要信息),有名称,描述,依赖,main,作者,版本等等,我们简略一下就不写那么多,主要写了如下


{
"name": "module",
"description": "example",
"version": "0.0.1",
"dependencies": {
},
"main": "module",
}

一般模块中的主文件是index.js,也就是"main":"index.js"。这里模块我们写的是module.js,我也就懒的改了,所以写成了module。


var module = require(‘./example_module‘);
console.log(module.dbleNum(3));
console.log(module.tripleNum(3));

这样就可以调用example_module这个包了。由于不是通过npm安装,不能直接require(‘example_module‘);自己尝试了下,如果新建个node_modules文件夹,把example_module放里面,就可以直接require(‘example_module‘),应该是因为npm安装的包也是会安装到node_modules中的。

说到现在还没说exports和module.exports的区别,囧。

如果创建了一个module,想返回其中的一个变量或者函数,将其直接赋给exports是不可以的,如下


var calcNum = function(){};
calcNum.prototype.dbleNum=function(num){
return num*2;
}
calcNum.prototype.tripleNum=function(num){
return num*3;
}
exports = calcNum;

这样是不可以的。但是如果可以将exports换成module.exports就是可行的。此时倒出的calcNum,如果在example.js中调用就要像下面这样子。


var module = require(‘module‘);
var test = new module;
console.log(module.dbleNum(3));
console.log(module.tripleNum(3));

这是因为exports是module.exports的全局引用,exports.myfunc是module.exports.myfunc的缩略写法。于是,如果将任何函数、对象、变量赋给exports就断开了exports与module.exports的引用关系,而事实上module.exports是真正的出口,所以直接将变量或者函数赋给exports是不可以的(exports.myfunc=myfun是可以的,因为没有切断exports和module.exports的引用关系)。因此,在同一个module中,如果exports和module.exports同时存在,exports是会被忽略的。

如有错误,欢迎指正。

node.js中的exports和module.exports,布布扣,bubuko.com

时间: 2024-12-26 09:16:28

node.js中的exports和module.exports的相关文章

Node.js中的模块接口module.exports浅析

在写node.js代码时,我们经常需要自己写模块(module).同时还需要在模块最后写好模块接口,声明这个模块对外暴露什么内容.实际上,node.js的模块接口有多种不同写法.这里作者对此做了个简单的总结. 返回一个JSON Object 如下代码是一个简单的示例. 1 var exp = { 2 "version": "1.0.0", 3 "function1": null, 4 "module1": null, 5 };

Node.js学习笔记(一)module.exports与exports

在node.js中模块与文件是一一对应的,也就是说一个node.js文件就是一个模块.如将函数作为模块的方法导出: var printName=function(name){ console.log(name); }; exports.printName=printName; 然后在index.js文件中请求这个模块,使用该模块的方法: var name=require('./name'); name.printName(xiaomu); //xiaomu 其实module.exports才是模

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以及require方法

在Node.js中,使用module.exports.f = ...与使用exports.f = ...是一样的,此时exports就是module.exports的一种简写方式.但是,需要注意的是,如果直接给exports赋值的话,exports就与module.exports没有任何关联了,比如: exports = { hello: false }; // Not exported, only available in the module 此时,exports是没有导出任何变量的. 要弄

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

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

node.js 的 exports 和 module.exports 的区别

commonjs node.js 的模块系统就是按照模块化规范 commonjs 来实现的: var math = require("math"); math.add(1, 2); exports 和 module.exports node.js 实现模块化最常用的函数就是 exports 和 module.exports. exports 是指向 module.exports 的引用.它们初始化都是为{},require() 返回的是 module.exports,所以当改变了 mo

node.js中的exports和model.exports

nodejs编译js文件时对js文件的包装 nodejs在编译js文件时会对获取的js文件内容进行头尾包装 (function(exports,require,module,__filename,__dirname){\n 和 \}),正常的js文件就变成了: (function(exports,require,module,__filename,__dirname){ var a=function(){}; .............. }) 包装后我们在每一个js文件中都会有变量export

(译)Node.js的模块-exports和module.exports

原文标题:Node.js Module – exports vs module.exports原文链接:http://www.hacksparrow.com/node-js-exports-vs-module-exports.html exports 和 module.exports 有什么区别? 你一定很熟悉 Node.js 模块中的用来在你的模块中创建函数的 exports 对象,就像下面这样. 创建一个叫做rocker.js的文件: exports.name = function() {

Node.js模块导出exports 和 module.exports 的区别

每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {} module.exports = {}; exports和module.exports指向同一块内存,但require()返回的是module.exports而不是exports. var str = "difference" exports.a = str; exports.b = function () { } 给 exports 赋值其实是给