十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇文章为大家展示了Node.js中模块机制的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
创新互联专业提供成都主机托管四川主机托管成都服务器托管四川服务器托管,支持按月付款!我们的承诺:贵族品质、平民价格,机房位于中国电信/网通/移动机房,达州服务器托管服务有保障!
Node的模块规范
其实模块的定义非常简单,主要分为模块引用,模块定义和模块标识三个部分。
1)模块引用
Node.js中存在require()方法,这个方法接受模块标识,以此引入一个模块的API到当前的上下文中。
2)模块定义
既然我们可以用require()来引入模块,那自然也可以引出模块。Node.js提供了exports对象用于导出当前模块的方法和变量,并且exports是唯一导出的出口。在每个模块中,存在一个module对象,表示模块本身,exports其实就是module的一个属性。在Node.js中,一个文件其实就是一个模块,将我们需要导出的方法和属性绑定在exports对象上作为属性就可以将该方法或属性导出。
在另一个模块,可以通过require()引入模块,就可以使用导出的方法sum()。
3)模块标识
模块标识其实传递给require()方法的参数,模块标识必须是符合驼峰命名的字符串或者以./,../开头的路径,引入模块模块标识可以省略.js后缀。
模块的好处是将特定的方法和变量限定在特定的作用域中,使得开发者完全不必去考虑变量污染的问题。
Node.js的模块实现
在Node.js中,有三类模块,其中一类是Node.js提供的核心模块,就比如上一篇说过的fs文件模块,database数据库模块,还有一类是开发者自行编写的文件模块,就比如刚才示例的test.js模块,第三类就是自定义模块,这是一种特殊的文件模块,一般是一个文件或包的形式,比如引入MySQL所需的jar包。
在Node.js中引入模块,需要经历三步:
(1)路径分析
对于文件模块来说,引入时模块标识指明了确切的文件位置,所以在路径分析中可以省略大量时间,加载速度仅次于核心模块。
自定义模块则是会从项目根目录逐个比较路径,直到找到目标模块为止。所以,自定义模块的路径越深,路径分析的耗时越多,所以自定义模块的加载速度是最慢的。
(2)文件定位
刚才其实说过了,模块标识可以不包含后缀名,所以Node.js在文件定位时会依次补充.js,.json,.node后缀名,然后去进行文件定位,因为Node.js是单线程,所以文件定位时会发生堵塞,所以如果引入的模块后缀是.json或者.node,可以在引入的时候加上后缀,可以提高查找速度。
(3)编译执行
定义到具体文件后,Node.js会创建一个模块对象,然后将模块引入并且编译。每一个编译成功的模块其文件路径都会作为索引缓存在缓存对象上,以提高二次引入模块的性能。
核心模块在Node.js源代码的编译过程中,直接被编译成二进制文件,然后被直接加载到内存中,所以核心模块引入时,文件定位和编译执行这两个步骤可以直接跳过,并且核心模块在路径分析中会被优先判断,所以核心模块的加载速度是最快的。
文件模块则是在执行时动态加载,所以路径分析,文件定位以及编译执行这三个步骤都不可省略,所以加载速度比核心模块慢。
Node.js对引入过的模块会进行缓存,以减少二次引入模块的性能开销二次加载模块一律采用缓存优先方式。核心模块的缓存检查优先于文件模块。
包管理工具NPM
刚才说到Node模块,但是虽然我们可以引用模块,但是模块与模块之间仍然是散列在各地的,相互之间并不能直接引用。而Node的包管理工具NPM则将模块相互联系起来。包其实是在模块的基础上进一步组织JavaScript代码。
其实NPM会有一个包描述文件package.json,一般位于包的根目录, NPM的所有行为都与包描述文件息息相关。前面几篇有讲过NPM作为默认包管理工具,会作为Node环境被一起安装。
NPM常用功能
NPM帮助Node完成了第三方模块的发布,安装和依赖。因为有NPM的存在,Node和第三方模块之间形成了很好的一个生态系统,而且逐渐越来越强大。接下来大致讲解下几个NPM常见命令
npm --version 查看当前NPM的版本
npm 查看帮助说明
npm help 查看具体命令说明
执行命令会在浏览器中打开对应命令的说明文档
npm install 安装依赖包,默认使用–-save参数,即默认添加到package.json中
执行该命令,NPM会在当前目录创建node_modules目录,然后再node_modules创建对应依赖包的目录,然后将依赖包解压到该目录。
npm init在此目录初始化生成package.json文件
7.npm uninstall
8.npm ls查看当前目录的依赖包
9.npm root -g查看全局安装地址
10.npm list
NPM存在的问题
在NPM平台,每个人都可以分享包,所以包质量没有办法保证,而且Node.js运行在服务端,所以需要考虑安全问题。所以一个优秀的模块需要符合几大模块:
(1)具备良好的测试
(2)具备良好的文档
(3)具备良好的测试覆盖率
(4)具备良好的代码规范
上述内容就是Node.js中模块机制的原理是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。