美文网首页
CommonJs模块的加载原理

CommonJs模块的加载原理

作者: 不看盛景不叙深情 | 来源:发表于2018-11-02 10:42 被阅读0次

CommonJS 的一个模块,就是一个脚本文件。require命令第一次加载该脚本,就会执行整个脚本,然后在内存生成一个对象。

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

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

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

总之,CommonJS 输入的是被输出值的拷贝,不是引用。

另外,由于 CommonJS 模块遇到循环加载时,返回的是当前已经执行的部分的值,而不是代码全部执行后的值,两者可能会有差异。所以,输入变量的时候,必须非常小心。

相关文章

  • CommonJs模块的加载原理

    CommonJS 的一个模块,就是一个脚本文件。require命令第一次加载该脚本,就会执行整个脚本,然后在内存生...

  • js模块化

    CommonJS CommonJS规范是诞生比较早的。NodeJS就采用了CommonJS。是这样加载模块: 这种...

  • javascript模块化总结

    CommonJS 规范 实现js模块化模块加载 require模块标识 module模块定义 exports No...

  • 浏览器内核

    一、区别: 1.CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。 2.CommonJS 模块的r...

  • webpack and react-router按需加载

    原理:CommonJS与import() 方法一:CommonJS模块语法 利用require.ensure,re...

  • 2019-11-25

    commonJs和es6模块的区别 commonJs支持动态加载模块,导入模块的路径可以是一个依赖执行的变量,也可...

  • ES6 模块与 CommonJS 模块的差异

    CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。 commonjs模块加载后原始类型的值...

  • export,import

    ES6之前模块加载方案,CommonJS (用于服务器)和 AMD(浏览器)2.CommonJS 和 AMD模块只...

  • ES6模块与CommonJS的区别

    CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。CommonJS 模块是运行时加载,ES...

  • AMD、CMD、CommonJs、ES6的对比

    一、CommonJS 和 ES6 区别: 1.CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。...

网友评论

      本文标题:CommonJs模块的加载原理

      本文链接:https://www.haomeiwen.com/subject/mayqxqtx.html