node.js深入浅出4-------模块机制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/strivenoend/article/details/86644041

模块机制

类比java的类库,php的函数库和类库,你会发现如果说作为服务端语言来讲,js缺少库,js----模块系统+ecmascript

之前的ecmascript只是定义了一些核心的库,对于文件系统,i/o流等常见需求并没有标准的api,也灭有web服务器和数据库的统一接口,也没有包的管理,而如果想让js应用在服务器端,貌似需要为其开发对应的api以及包的管理器,

运行在node端的js的规范包含:ecmascript+commonjs规范制定的标准库

(一)commenjs的模块规范标准

模块引用:require('模块名');,将模块的api引入在上下文中

模块定义:一个文件就是一个模块,module对象代表模块自身,exports是module的属性,该对象用于导出当前模块的方法啊或变量,将函数挂载在exports对象上作为属性即可导出,被外界文件所引用,

模块标识:就是传递给require方法的参数 模块文件的相对路径/绝对路径 (文件模块)慢|| 小驼峰命名的字符串(核心模块)快

module对象的属性require和exports,其中将函数或者变量赋值给exports属性可以实现该模块的函数被外界js文件所调用

require可以将模块引入在文件中,

(二)node对模块的支持

node的模块分类:node的核心模块(node自带的) 用户编写的模块(文件模块),无论是node自带的还是用户编写的,都是需要三个步骤才能让模块加载到内存进行编译的

有机会可以看一看node的源码对于module对象的封装,其require属性是什么样的,

既然其可以引入模块,那require的实现思路大概是这样的

1)路径分析

2)文件定位

3)编译执行

对于核心模块,也就是node自带的模块,都是已经编译过了集成在node中的,有一些非常核心的模块甚至会在node进程启动的时候直接被加载进内存,其省略了编译执行和文件定位的步骤,速度快

对与用户模块是在运行时动态加载,需要123三个步骤,引入的速度慢

但是node会对引入的模块进行缓存,node缓存的是编译和执行之后的对象

因此模块的引入步骤

1检查核心模块缓存中是否有?检查文件模块缓存中是否有?

2如果没有的话,执行三个步骤路径--文件定位---加载内存---编译执行

猜你喜欢

转载自blog.csdn.net/strivenoend/article/details/86644041