NodeJS2-1环境&调试----CommonJS
CommonJS
- 每个文件是一个模块,有自己的作用域
- 在模块内部module变量代表模块本身
- module.exports属性代表模块对外接口
require规则
- /表示绝对路径,./表示型对于当前文件的(相对路径)
- 支持js,json,node拓展名,不写依次尝试,都找不到就会报错
- 不写路径则认为build-in模块或者各级node_modules内的第三方模块
require特性
- module被加载的时候执行,加载后缓存(只加载一次)
- 一旦出现某和模块被循环加载,就只输出已经执行的部分,还未执行的部分不会输出
require特性1的例子:
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;
调用它的 04_cache.js
require('./02_cusmod.js');
require('./02_cusmod.js');
如果不是只加载一次的话,那么运行04_cache.js控制台就会输出两次 this is module 这句话
可是
require特性2的例子:(日常要避免出现这种情况)
05_modA.js
module.exports.test = 'A'; const modB = require('./06_modB.js') console.log('modA的执行结果'+modB.test); module.exports.test = 'AA'
06_modB.js
module.exports.test = 'B' const modA = require('./05_modA.js') console.log('modB的执行' + modA.test); module.exports.test='BB'
07_main.js
const modA = require('./05_modA.js') const modB = require('./06_modB.js')//因为modA 里面已经调用了modB,所以这里调用的modB只是从缓存里读出
console.log(modA.test);
console.log(modB.test);
运行结果: