什么是nodejs模块

技术什么是nodejs模块本篇内容介绍了“什么是nodejs模块”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

本文介绍了“什么是节点模块”的知识。很多人在实际案例的操作中会遇到这样的困难。让边肖带领你学习如何处理这些情况。希望大家认真阅读,学点东西!

模块是Node.js应用的基本组件,文件和模块一一对应。Nodejs模块是一个文件,这个文件可能是JavaScript代码、JSON或者编译后的“C/C”扩展名,引用模块可能使用“require('文件路径')语句。

什么是nodejs模块

本教程操作环境:windows7系统,nodejs 12 . 19 . 0版,戴尔G3电脑。

为了使Node.js的文件相互调用,Node.js提供了一个简单的模块系统。

模块是Node.js应用的基本组件,文件和模块是一一对应的。换句话说,Node.js文件是一个模块,它可以是JavaScript代码、JSON或编译后的C/C扩展。

对于nodejs,文件就是一个模块。您可以导出接口,也可以要求引入其他模块。

//module1.js

exports . func 1=func(){ 0

console . log(' func1 from module 1 called ');

}module1通过exports对象将func1作为模块的公共访问接口。

//module2.js

varin_module1=require('。/module 1 . js ');

in _ module 1 . func 1();

exports . func 2=function(){ 0

console . log(' func 2 from module 2 called ');

}module2引入了module1 require,此时,in_module1相当于module1的exports对象。用in_module1调用func1时,相当于通过module1的exports对象调用func1。

同时,模块2的函数func2也通过模块的exports对象作为模块2的公共接口。

//模块3.js

varin_module2=require('。/module 2 . js ');

in _ module 2 . func 2();同样,module3引入module2 require,in_module2相当于module2的exports对象。

运行结果如下:

rlan @ rlan-LA: ~/nodejs/node test $ node module 2 . js

func1frommodule1called

rlan @ rlan-LA: ~/nodejs/node test $ node module 3 . js

func1frommodule1called

在模块中引入func2frommodule2callednodejs不仅可以获取模块的公共接口,还可以引用文件中的其他语句,例如:

Module1.js更改为。

//module2.js

console . log(' this inmodule 2 ');

varin_module1=require('。/module 1 . js ');

in _ module 1 . func 1();

exports . func 2=function(){ 0

(=NationalBureauofStandards)国家标准局

p;   console.log('func2 from module2 called');
}

module2引入了module1的func1函数,同时执行了module1中的打印语句:

rlan@rlan-LA:~/nodejs/nodetest$ node module1.js
this is in module1
rlan@rlan-LA:~/nodejs/nodetest$ node module2.js
this is in module2         - module2 self
this is in module1         - require module1
func1 from module1 called  - module2 self

现在,module2 载入了module1,module3载入了module2,如果module3再载入一次module1会怎么样呢?

// module3.js
var in_module1 = require('./module1.js');
var in_module2 = require('./module2.js');
in_module1.func1();
in_module2.func2();

这时候,module3首先载入了module1,又载入了module2,module2自己又载入了module1的部分,运行结果为

rlan@rlan-LA:~/nodejs/nodetest$ node module3.js
this is in module1        -  require module1
this is in module2        -  require module2
func1 from module1 called -  require module2
func1 from module1 called -  module3 self
func2 from module2 called -  module3 self

假如把module3的require顺序调整一下:

// module3.js
var in_module2 = require('./module2.js');
var in_module1 = require('./module1.js');
in_module1.func1();
in_module2.func2();

运行结果为:

rlan@rlan-LA:~/nodejs/nodetest$ node module3.js
this is in module2         - require module2
this is in module1         - require module2
func1 from module1 called  - require module2
func1 from module1 called  - module3 self
func2 from module2 called  - module3 self

看起来nodejs用某种机制保证了同一个模块在另一个模块里不会被重复载入,所以

this is in module1

这一行只出现了一次,虽然在module3.js里似乎被载入了两次。

那么,如果循环载入了会发生什么呢?现在我们让module1来require module2:

// module1.js
console.log('this is in module1');
var in_module2 = require('./module2.js');
exports.func1 = function(){
        console.log('func1 from module1 called');
}
// module2.js
console.log('this is in module2');
var in_module1 = require('./module1.js');
in_module1.func1();
exports.func2 = function(){
        console.log('func2 from module2 called');
}

运行结果如下:

rlan@rlan-LA:~/nodejs/nodetest$ node module1.js
this is in module1
this is in module2
/home/rlan/nodejs/nodetest/module2.js:4
in_module1.func1();
           ^
TypeError: in_module1.func1 is not a function
    at Object.<anonymous> (/home/rlan/nodejs/nodetest/module2.js:4:12)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/home/rlan/nodejs/nodetest/module1.js:3:18)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
rlan@rlan-LA:~/nodejs/nodetest$ node module2.js
this is in module2
this is in module1
func1 from module1 called

nodejs似乎阻止了载入自己的行为,运行module2的时候,行为跟module1没有载入module2的结果一样,并没有报错。而在运行module1的时候,当走到module2里面,忽略了require module1的语句之后,module2调用了module1的func1,程序出错。

综上,nodejs里嵌套重复载入模块(或者载入自己)的require语句是不能正确执行的。

“什么是nodejs模块”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/56388.html

(0)

相关推荐

  • 台式电脑屏幕亮度怎么调节,如何调节台式电脑屏幕亮度

    技术台式电脑屏幕亮度怎么调节,如何调节台式电脑屏幕亮度调节台式电脑屏幕亮度方法:首先鼠标右键单击桌面空白处台式电脑屏幕亮度怎么调节,选择NVIDIA的控制面板。其次需要点击调整桌面颜色设置,在选择颜色设置方式下方,选择使

    生活 2021年10月22日
  • GET和POST两种基本请求方法的区别有哪些

    技术GET和POST两种基本请求方法的区别有哪些本篇内容主要讲解“GET和POST两种基本请求方法的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“GET和POST两

    攻略 2021年10月27日
  • 厘米的符号,cm这是数学的什么单位

    技术厘米的符号,cm这是数学的什么单位数学单位mm,cm代表毫米和厘米。 毫米,英文缩写mm(或 毫米,又称公厘(或公釐),是长度单位和降雨量单位,英文缩写mm(或 毫米。1毫米相当于1米的一千分之一(此即为毫的字义)。

    生活 2021年10月20日
  • Linux nmap/隧道工具

    技术Linux nmap/隧道工具 Linux nmap/隧道工具一、Nmap简介:Nmap(Network Mapper)网络映射器是一款开源的网络探测和安全审核的工具,应用在端口扫描等场景上;1.

    礼包 2021年12月6日
  • INTERVAL DAY TO SECOND数据类型是怎样的呢

    技术INTERVAL DAY TO SECOND数据类型是怎样的呢这篇文章给大家介绍INTERVAL DAY TO SECOND数据类型是怎样的呢,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。INT

    攻略 2021年11月30日
  • redis中RedissonLock如何实现等待锁

    技术redis中RedissonLock如何实现等待锁今天就跟大家聊聊有关redis中RedissonLock如何实现等待锁,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有

    攻略 2021年11月11日