什么是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)

相关推荐

  • java项目会用到main方法吗(java main方法可以有几个)

    技术Java main方法面试题有哪些本篇内容主要讲解“Java main方法面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java main方法面试题有哪些”吧

    攻略 2021年12月22日
  • Spring框架访问数据库的两种方式的小案例

    技术Spring框架访问数据库的两种方式的小案例 Spring框架访问数据库的两种方式的小案例1.1 以Xml的方式访问数据库的案例
    要以xml的方式访问数据库需要用到JdbcTemplate ,因为

    礼包 2021年10月19日
  • 简谐运动公式,简谐运动周期简单的推导公式

    技术简谐运动公式,简谐运动周期简单的推导公式简谐振动位移公式x=asinωt
    简谐运动恢复力
    f=-kx=-md^2x/dt^2=-mω^2x
    ω^2=k/m
    简谐运动周期公式
    t=2π/ω=2π(m/k)^1/2
    如果

    生活 2021年10月23日
  • 夕阳余晖啥意思是什么,落日余晖,残阳晚霞是什么意思

    技术夕阳余晖啥意思是什么,落日余晖,残阳晚霞是什么意思这句话的意思是傍晚的时候,落日的余晖倒映着晚霞夕阳余晖啥意思是什么。出自当代诗家张小红的《浣溪沙·寄夫》:落日余晖映彩霞,绵绵心事向天涯。相思飞过老篱笆。烦闷休贪杯里

    生活 2021年10月28日
  • centos7 安装包安装mysql8.0.18 rpm-bundle

    技术centos7 安装包安装mysql8.0.18 rpm-bundle centos7 安装包安装mysql8.0.18 rpm-bundle一、资源地址
    下载地址https://dev.mysql

    礼包 2021年11月4日
  • 抖音刷直播人气,抖音直播刷人气详情介绍!

    技术抖音刷直播人气,抖音直播刷人气详情介绍!抖音直播人气购买,抖音直播刷人气软件,抖音直播刷人气,如果在直播间涨粉,前提要做如何做到直播间有人进来
    靠排比例的话数能上1000人在线,一个月稳定卖一百万一直靠砍光的和热量很

    测评 2021年10月21日