CommonJS

CommonJS模块的加载原理

CommonJS的一个模块,就是一个脚本文件

// 一个CommonJS模块 a.js
module.exports = {
  foo: 'hello',
  bar: 'world'
}

require 命令第一次加载改脚本,就会执行整个脚本,然后在内存生成一个对象。

{
  id: '...',
  exports: {...},
  loaded: true,
}

上面代码就是Node内部加载模块后生成的一个对象。该对象的id属性是模块名,exports属性是模块输出的各个接口,loaded属性是一个布尔值,表示该模块的脚本是否执行完毕。其他还有很多属性,这里都省略了。

以后需要用到这个模块的时候,就会到exports属性上面取值。即使再次执行require命令,也不会再次执行该模块,而是到缓存之中取值。也就是说,CommonJS模块无论加载多少次,都只会在第一次加载时运行一次,以后再加载,就返回第一次运行的结果,除非手动清除系统缓存。

你可能感兴趣的:(CommonJS)