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

相关推荐

  • 大数据中的命令执行是怎样的

    技术大数据中的命令执行是怎样的大数据中的命令执行是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、在php中具有执行系统命令功能的函数:1、syst

    攻略 2021年12月10日
  • CF1148H Holy Diver

    技术CF1148H Holy Diver CF1148H Holy Diver一、题目
    点此看题
    二、解法
    输入特性要求的做法就应该是移动右端点 \(r\) 然后维护一些东西。
    首先考虑怎么维护 \([

    礼包 2021年10月28日
  • HTTP代理和SOCKS之间有什么区别

    技术HTTP代理和SOCKS之间有什么区别这期内容当中小编将会给大家带来有关HTTP代理和SOCKS之间有什么区别,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Socket secur

    攻略 2021年11月11日
  • 红烧肉的做法窍门,家庭版红烧肉怎么做不油腻

    技术红烧肉的做法窍门,家庭版红烧肉怎么做不油腻您好红烧肉的做法窍门,我是嘴嘴深夜食堂家庭版红烧肉只需要一坛黄酒,一块老姜,再加上盐,酱油,冰糖这几样东西,就可以做得非常好吃了,这个是跟着黄磊老师的做法做的哦1:五花肉清洗

    生活 2021年10月22日
  • jquery怎么增加一行tr

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

    攻略 2021年11月16日
  • mysql临时表的问题有哪些

    技术mysql临时表的问题有哪些这篇文章主要为大家展示了“mysql临时表的问题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql临时表的问题有哪些”这篇文章吧。

    攻略 2021年11月6日