本文介绍了“什么是节点模块”的知识。很多人在实际案例的操作中会遇到这样的困难。让边肖带领你学习如何处理这些情况。希望大家认真阅读,学点东西!
模块是Node.js应用的基本组件,文件和模块一一对应。Nodejs模块是一个文件,这个文件可能是JavaScript代码、JSON或者编译后的“C/C”扩展名,引用模块可能使用“require('文件路径')语句。
本教程操作环境: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