Node 应用由模块组成,采用 CommonJS 模块规范。
每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
02_cusmod.js
console.log('This is a module'); const testVar=100; function test(){ console.log(testVar);//打印变量 } //对外提供了两个输出 module.exports.testVar=testVar;//对外提供接口 module.exports.testFn=test;
模块的初始化:
1、引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。
require规则:
1、/ 表示绝对路径,./ 表示相对于当前文件的
2、支持js、json、node拓展,不写依次尝试
3、不写路径则认为是build_in模块或者各级node_modules内的第三方模块
调用我们自定义的模块02_cusmod.js,新建一个
03_require.js
const mod=require('./02_cusmod'); console.log(mod.testVar); mod.testFn();
结果显示:
发现第一句被打印出来,由此我们知道当加载一个模块的时候所有的语句都会被打印出来
require特性
1、moudle被加载的时候执行,加载后缓存;
加载后缓存:只加载一次,就被存放在内存中去,下一次使用时就直接拿来用;
例如:
结果只显示一行,并没有显示两行
2、一旦出现某一个模块被循环加载,就只输出已经执行的部分,还未执行的部分不会输出
例如:
创建05_modA.js
module.exports.test='A'; const modB=require('./05_modB'); console.log('模块A:',modB.test); module.exports.test='AA';
创建05_modB.js
module.exports.test='B'; const modA=require('./05_modA'); console.log('模块B:',modA.test); module.exports.test='BB';
创建05_mod.js调用模块A和B:
const modA=require('./05_modA'); const modB=require('./05_modB'); console.log(modA.test); console.log(modB.test);
最终显示的结果:
当注释了这一句const modB=require('./05_modB');显示的结果仍然时如此,因为执行了一次以及被缓存了: