Node.js学习笔记(九、模块系统)

举报
三分恶 发表于 2021/04/23 00:56:04 2021/04/23
【摘要】 Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。 创建模块 Node.js 提供了 exports 和 re...

Node.js模块系统

为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。
模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。

创建模块

Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。
创建hello.js,通过 exports 对象把 world 作为模块的访问接口。

exports.world = function() {
  console.log('Hello World');
}

  
 
  • 1
  • 2
  • 3

创建test.js,通过require(’./hello’) 加载hello模块,然后就可以直接访 问 hello.js 中 exports 对象的成员函数了。

var hello = require('./hello');
hello.world();

  
 
  • 1
  • 2

只把一个对象封装到模块中,格式如下:

module.exports = function() {
  // ...
}

  
 
  • 1
  • 2
  • 3

实例:
hello.js:

function Hello() { var name; this.setName = function(thyName) { name = thyName; }; this.sayHello = function() { console.log('Hello ' + name); }; 
}; 
module.exports = Hello;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在test.js中直接获取这个对象:

var Hello = require('./hello'); 
hello = new Hello(); 
hello.setName('BYVoid'); 
hello.sayHello(); 

  
 
  • 1
  • 2
  • 3
  • 4

模块接口的唯一变化是使用 module.exports = Hello 代替了exports.world = function(){}。 在外部引用该模块时,其接口对象就是要输出的 Hello 对象本身,而不是原先的 exports。

服务端的模块

从第一个实例开始,其实已经使用了模块,

var http = require("http");

...

http.createServer(...);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

Node.js 中自带了一个叫做 http 的模块,我们在我们的代码中请求它并把返回值赋给一个本地变量。

这把我们的本地变量变成了一个拥有所有 http 模块所提供的公共方法的对象。

Node.js 的 require 方法中的文件查找策略如下:

由于 Node.js 中存在 4 类模块(原生模块和3种文件模块),尽管 require 方法极其简单,但是内部的加载却是十分复杂的,其加载优先级也各自不同。如下图所示:
在这里插入图片描述

参考:
【1】、https://www.w3cschool.cn/nodejs/nodejs-module-system.html
【2】、https://www.runoob.com/nodejs/nodejs-module-system.html

文章来源: blog.csdn.net,作者:三分恶,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/sinat_40770656/article/details/96754823

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。