美文网首页
nodejs 之 module (模块模块)

nodejs 之 module (模块模块)

作者: believedream | 来源:发表于2017-03-31 21:37 被阅读0次

1.什么是module;##

Node.js 有一个简单的模块加载系统。 在 Node.js 中,文件和模块是一一对应的(每个文件被视为一个独立的模块)。
举例
1.js文件代码如下:

const circle = require('./2.js');
console.log(`半径为 4 的圆的面积是 ${circle.area(4)}`);

在第一行中,1.js 加载了同一目录下的 2.js 模块。

2.js文件代码如下:

const PI = Math.PI;

exports.area = (r) => PI * r * r;

exports.circumference = (r) => 2 * PI * r;

我们执行node 1.js,控制台运行显示:

Paste_Image.png

2.js 模块导出了 area() 和 circumference() 两个函数。 要想添加函数和对象到模块根,可以将它们添加到特殊的 exports 对象。
模块内的本地变量是私有的,在这个例子中,变量 PI是 2.js私有的。

如果希望模块根导出为一个函数(比如构造函数)或一次导出一个完整的对象而不是每次都创建一个属性,可以把它赋值给 module.exports 而不是 exports。

那么1.js 改写成:

const square = require('./square.js');
var mySquare = square(2);
console.log(`正方形的面积是 ${mySquare.area()}`);

那么2.js 改写成:

module.exports = (width) => {
  return {
    area: () => width * width
  };
}

2.访问主模块##

当 Node.js 直接运行一个文件时,require.main 会被设为它的 module。 这意味着你可以通过如下检测直接确定一个文件是否已运行:

require.main === module

对于1.js 文件,如果通过 node 1.js 运行则为 true,但如果通过 require('./2.js') 运行则为 false。

因为 module 提供了一个 filename 属性(通常等同于 __filename),所以可以通过检查 require.main.filename 来获取当前应用程序的入口点。

核心模块##

Node.js 有些模块会被编译成二进制。 这些模块别的地方有更详细的描述。核心模块定义在 Node.js 源代码的 lib/目录下。require()总是会优先加载核心模块。 例如,require('http')始终返回内置的 HTTP 模块,即使有同名文件。

文件模块##

如果按确切的文件名没有找到模块,则 Node.js 会尝试带上 .js、.json
或 .node 拓展名再加载。

.js文件会被解析为 JavaScript 文本文件,.json文件会被解析为 JSON 文本文件。 .node文件会被解析为通过 dlopen加载的编译后的插件模块。以 '/' 为前缀的模块是文件的绝对路径。 例如require('/home/marco/foo.js')会加载 /home/marco/foo.js文件。
以 './'为前缀的模块是相对于调用 require()的文件的。 也就是说,circle.js必须和 foo.js在同一目录下以便于 require('./circle')找到它。

当没有以 '/'、'./'或 '../'开头来表示文件时,这个模块必须是一个核心模块或加载自 node_modules 目录。如果给定的路径不存在,则 require() 会抛出一个 code属性为 'MODULE_NOT_FOUND'的 Error。

相关文章

  • nodejs-模块

    nodejs模块 一、nodejs模块分类 1.核心模块 Core Module、内置模块、原生模块 fs模块 p...

  • nodejs 之 module (模块模块)

    1.什么是module;## Node.js 有一个简单的模块加载系统。 在 Node.js 中,文件和模块是一一...

  • node 模块系统

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

  • nodejs

    cannot find module fs/promises 在模块中,旧版nodejs是require("fs"...

  • nodejs 调用express模块出错

    1.nodejs 调用express模块出错 ERCannot find module 'express' 安装E...

  • nodeJs的module模块

    为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编...

  • module.exports 和 exports、export

    module.exports 和 exports 是 nodejs 中的模块导出,属于 commonjs 规范里面...

  • Node中的模块

    转自:https://nodejs.lipengzhou.com/04-module.html 模块系统(modu...

  • node 模块循环依赖

    node 模块循环依赖 nodejs通过require加载依赖module,当两个module相互引用时,就会出现...

  • ARouter的集成

    有3种不同的module,app模块,base模块,和功能模块(module_begin(主模块),module_...

网友评论

      本文标题:nodejs 之 module (模块模块)

      本文链接:https://www.haomeiwen.com/subject/jrtbottx.html