作家
登录

很全很全的JavaScript模块讲解,看了绝不后悔!

作者: 来源: 2018-01-03 11:34:59 阅读 我要评论

假设先加载模块 a,在模块 a 加载完成之后,bar 借居性地指向的是模块 b 中的 bar。无论是加载完成的 imports 照样未完成的 imports,imports 和 exports 之间都有一个借居的接洽,所以老是可以正常工作。

Node.js模块不会被反复加载,这是因为Node.js经由过程文件名缓存所有加载过的文件模块,所以今后再拜访到时就不会从新加载了。

留意:Node.js是根据实际文件名缓存的,而不是require()供给的参数缓存的,也就是说即使你分别经由过程require('express')和require('./node_modules/express')加载两次,也不会反复加载,因为尽管两次参数不合,解析到的文件倒是同一个。

Node.js 中的模块在加载之后是以单例化运行,并且遵守值传递原则:如不雅是一个对象,就相当于这个对象的引用。

模块载入过程

加载文件模块的工作,重要由原生模块module来实现和完成,该原生模块在启动时已经被加载,过程直接调用到runMain静态办法。

例如运行: node app.js

  1. Module.runMain = function () {     
  2.  
  3. // Load the main module--the command line argument.     
  4.  
  5. Module._load(process.argv[1], nulltrue); 
  6.  
  7. }; 
  8.  
  9. //_load静态办法在分析文件名之后履行 
  10.  
  11. var module = new Module(id, parent); 
  12.  
  13. //并根据文件路径缓存当前模块对象,该模块实例对象则根据文件名加载。 
  14.  
  15. module.load(filename); 

具体说一下上文提到了文件模块的三类模块,这三类文件模块今后缀来区分,Node.js会根据后缀名来决定加载办法,具体的加载办法鄙人文 require.extensions中会介绍。

  • .js 经由过程fs模块同步攫取js文件并编译履行。
  • .node 经由过程C/C++进行编写的Addon。经由过程dlopen办法进行加载。
  • .json 攫取文件,调用JSON.parse解析加载。

接下来具体描述js后缀的编译过程。Node.js在编译js文件的过程中实际完成的步调有对js文件内容进行头尾包装。以app.js为例,包装之后的app.js将会变成以下情势:

  1. //circle.js 
  2.  
  3. var PI = Math.PI; 
  4.  
  5. exports.area = function (r) {     
  6.  
  7. return PI * r * r; 
  8.  
  9. }; 
  10.  
  11. exports.circumference = function (r) {     
  12.  
  13. return 2 * PI * r; 
  14.  
  15. }; 
  16.  
  17. //app.js 
  18.  
  19. var circle = require('./circle.js'); 
  20.  
  21. console.log( 'The area of a circle of radius 4 is ' + circle.area(4)); 
  22.  
  23. //app包装后 
  24.  
  25. (function (exports, require, module, __filename, __dirname) {     
  26.  
  27. var circle = require('./circle.js'); 
  28.  
  29.     console.log('The area of a circle of radius 4 is ' + circle.area(4)); 
  30.  
  31. }); 
  32.  

  33.   推荐阅读

      详解如何用深度学习消除背景,实现抠图

    【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞? 在上述课程中,我碰到了 Alon Burg——一名经验丰富的 web 开辟人员,我们刚好趣味相投。所认为了>>>详细阅读


    本文标题:很全很全的JavaScript模块讲解,看了绝不后悔!

    地址:http://www.17bianji.com/lsqh/40215.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)