模块的初始化

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');显示的结果仍然时如此,因为执行了一次以及被缓存了:
 
原文地址:https://www.cnblogs.com/jiguiyan/p/10752731.html