繁体   English   中英

了解Node.js中的模块

[英]Understanding modules in Node.js

我刚刚开始阅读有关Node.js的文章,有一件事,我觉得很难理解,所以想对您有所帮助! :)

尤其是,

var PI = Math.PI;

exports.area = function (r) {
  return PI * r * r;
};

exports.circumference = function (r) {
  return 2 * PI * r;
};

对此的解释是:

此代码创建一个PI变量,该变量只能由模块中包含的代码访问; 在模块外部无法访问。 接下来,在导出对象上创建两个函数。 这些功能可在模块外部访问,因为它们是在导出对象上定义的。 因此,可以完全保护PI免受外界干扰。 因此,您可以放心,area()和圆周()始终会保持应有的状态(只要为r参数提供了一个值)。

现在,我感到非常困惑的是它们在“模块内”和“模块外”的含义。 到目前为止,我已经了解到模块本质上就是我们所说的封装,对吗?

考虑到这一点,当他们提到:

此代码创建一个PI变量,该变量只能由模块中包含的代码访问; 在模块外部无法访问。

..它们是否意味着PI扮演着所谓的全局变量的角色? 另外,如果PI是全局变量,那么为什么呢:

PI受到完全保护

不受外界干扰。

谢谢!

当您说module.exports ,您使这些变量/函数可用于对代码文件有require任何文件。 PI无法用于外部干扰的原因是因为您没有像这样将PI分配给module.exports对象:

module.exports.PI = PI;

因此,如果您的代码位于名为geometry.js的文件geometry.js并且在同一目录中还有另一个名为circle.js的文件,那么请进一步执行此步骤。 circle.js可以访问两个circumferencearea通过要求geometry.jscircle.js这样:

// circle.js
var geometry = require('geometry.js');

console.log(geometry.area(2));
console.log(geometry.circumference(2));

本质上,如果未将变量添加到module.exports对象,则该变量在文件中是本地的;如果将其添加到module.exports对象,则该module.exports可用于在require语句中实现代码的任何其他代码。

这是对模块的很好解释,以及Mixu的Node Book中的示例

摘自Mixu的Node Book第8章

模块对于在Node中构建应用程序至关重要,因为它们允许您包含外部库(例如数据库访问库),并且它们有助于将代码组织成责任有限的单独部分。 您应该尝试在自己的代码中标识可重用的部分,并将它们转换为单独的模块,以减少每个文件的代码量,并使其更易于阅读和维护代码。

我认为答案在包含您发布的代码的开头段落中有所揭示

var myModule = require('./myModule.js');

模块是封装的代码段。 模块中的代码大部分是私有的,这意味着它们中定义的函数和变量只能从模块内部访问。 但是,您可以公开要在模块外部使用的函数和/或变量。

您发布的代码将是myModule PI将在该模块内部,并且只能从该模块内部访问。

首先在require位置执行第一行,然后从模块外部执行myModule.area() 但是您不能执行myModule.PI ,因为它是该模块的本地模块,因此除非您编写一些内容来export它,否则无法访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM