作为node.js 简介一文的延续,本文将重点介绍 node.js 模块。
什么是节点模块?
模块将相关节点压缩至一个代码单元中。 当创建模块时,我们可以理解为将所有相关函数移动到一个文件中。 节点模块在各自的范围内运行,彼此之间不会相互干扰。 节点可以相应地提供针对部分 global的访问权限,以便帮助实现模块互操作性。这里我们主要关注 require和 exports
。您可能 希望在
您的代码中使用其它模块,而且您的模块将会 导出
应对外公布的任何内容。我们来看一个示例:将下面的代码保存为 testcode.js
exports.name = function() { console.log('My name is Sourav Lahoti'); };
从另外一个文件调用:
var testCode= require('./testcode.js'); testCode.name(); // 'My name is Sourav Lahoti
因此,在本例中,我们使用 exports 关键字来定义模块,该模块将在测试时被另外一个 js 文件导入。
module.exports 和 exports 之间的区别
您可以同时使用 exports
和 module.exports
将代码导入至您的应用,如下所示:
var mytestcode = require('./path/to/mycode');
您将看到的基本使用案例(例如在 ExpressJS 示例代码中)是,在.js 文件中设置 exports
对象的属性,然后使用 require()
进行导入
因此,在一个简单的计数示例中,您可能会具有:count.js
var counter = 1; exports.increment = function() { counter++; }; exports.getCountNumber = function() { return counter; };
.. 然后在您的应用中(任意其它 .js 文件):
var count = require('./count.js'); console.log(counting.getCountNumber()); // 1 count.increment(); console.log(counting.getCountNumber()); // 2
简言之,您可以将所需的文件看做可返回单个对象的函数,而且通过在exports
上设置,可以将属性(字符串、数字、阵列和函数等)添加至返回的对象。
有时候,您希望从 require()
调用返回的对象是能够调用的函数,而不仅仅是一个具有一些属性的对象。 在这种情况下,您还需要设置 module.exports
,如下所示:
(hello.js):
module.exports = exports = function() { console.log("Hello World!"); };
(app.js):
var Hello = require('./hello.js'); Hello(); // "Hello World!"
我们介绍了节点模块,以及如何在 node.js 中使用。 在接下来的文章中,我们将会介绍 upon npm(节点包管理器以及为何使用该管理器)。