Node学习笔记之模块实现
一、模块分类
- 由Node提供的模块,称为核心模块;部分核心模块在Node源代码的编译过程中,编译进了二进制执行文件。在node进程启动时,该部分就直接加载进内存,文件定位和编译执行的步骤可以省略掉,并且在路径分析中优先判断,所以它的加载速度是最快的。
- 用户编写的模块,成文文件模块;文件模块在运行时动态加载,需要完整的路径分析、文件定位、编译执行过程,速度比核心模块慢。
二、模块规范(CommonJs)
- 模块的引用
- var http = require('math');
- 在CommonJs中存在require()方法,这个方法接受模块标识,以此引入一个模块的API到当前的上下文中。
- 模块定义
- 用exports对象导出当前模块的方法或者变量,并且它是唯一导出的出口。在模块中,还存在module对象,代表模块本身,而exports是module的属性。在node中,一个文件就是一个模块,将方法挂载在exports对象上作为属性即可定义导出的方式。
//math.js
exports.add = function(){
var sum = 0,
i =0 ,
args = arguments,
l =args.length;
while (i<1){
sum += args[i++];
}
return sum
}
//program.js
var math = require('math');//引入自定义模块(math.js)
exports.increment = function(val){
return math.add(val,1);//使用模块定义的方法
};
3.模块标识
模块标识就是传递给require()方法的参数,它必须是符合小驼峰命名的字符串,或者以. 、..开头的相对路径,或者绝对路径,可以没有后缀名.js
三、 Node模块实现
实现三步骤
| 1.路径分析 |
通过标识符进行模块查找,分几类
加载方式和优先级
|
| 2.文件定位 |
注意:从缓存加载的优化策略使得二次引入是不需要路径分析、文件定位、编译执行的过程,大大提高了再次加载模块时的效率。 在文件定位的过程中,还要注意一些细节,包括文件扩展名的分析、目录和包的处理。
|
| 3.编译执行 |
每个文件模块都是一个对象,定位到具体文件后,Node就会新建一个模块对象,然后根据路径载入并编译。对于不同的文件扩展名,载入方法不同
每个编译成功的模块都会将其文件路劲作为索引缓存在Module._cache对象上,以提高二次引入的性能。 |
Node学习笔记之模块实现的更多相关文章
- node 学习笔记 - Modules 模块加载系统 (1)
本文同步自我的个人博客:http://www.52cik.com/2015/12/11/learn-node-modules-path.html 用了这么久的 require,但却没有系统的学习过 n ...
- node 学习笔记 - Modules 模块加载系统 (2)
本文同步自我的个人博客:http://www.52cik.com/2015/12/14/learn-node-modules-module.html 上一篇讲了模块是如何被寻找到然后加载进来的,这篇则 ...
- node学习笔记6——自定义模块
自定义模块三大关键词: require——引入模块: exports——单个输出: module——批量输出. 从例子下手: 1.创建module.js: exports.a=22; exports. ...
- node学习笔记(二)(ajax方式向node后台提交数据)
通过ajax向node后台提交数据过程(附手写前后台代码),并总结post与get的区别 POST 前台代码 //CSS简单给点样式 <style> form{ width: 200px; ...
- Python学习笔记—itertools模块
这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较 ...
- node学习笔记3——文件操作fs
文件操作关键字: http('fs') —— 请求 node 里面的 http 模块 readFile —— 读文件,参数包括 文件名,回调函数 writeFile —— 写文件,参数包括 文件 ...
- Python学习笔记之模块与包
一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...
- node学习笔记
一.准备(github地址) 什么是Javascript? ... Javascript能做什么? ..... 浏览器中的Javascript可以做什么? 操作DOM(增删改查) AJAX/跨域 BO ...
- node学习笔记(三)
//事件驱动events //events是node最重要的模块没有之一,因为node.js本身的架构就是事件式的,而他提供了唯一的接口,所以堪称node.js事件编程的基石; //events几乎被 ...
随机推荐
- Mac终端使用技巧 切换到其他路径和目录
如果你想将当前 command line 会话切换到其他目录,需要用到三个命令:pwd,ls和cd. pwd的含义是“print working directory”,会显示当前目录的绝对路径. ls ...
- BlockingQueue介绍及使用
1.BlockingQueue队列和平常队列一样都可以用来作为存储数据的容器,但有时候在线程当中 涉及到数据存储的时候就会出现问题,而BlockingQueue是空的话,如果一个线程要从Blockin ...
- linux 用户管理命令useradd、passwd、who、whoami、id、w及创建用户默认值文件
useradd /usr/sbin/useradd执行权限:rootuseradd [选项] 用户名-u UID:手工指定用户的UID号-d 家目录:手工指定用户的家目录-c 用户说明:手工指定用户的 ...
- MongoDB数据库安装及配置环境(windows10系统)
windows10系统下MongoDB的安装及环境配置: MongoDB的安装 下载地址: https://www.mongodb.com/download-center (这是windows10环境 ...
- ElasticSearch入坑指南之概述及安装
---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...
- hyper-v 无线网连接
本人的工作环境 笔记本一台,window 10系统64位.平时连接的是有线网,今天回到家里,准备继续在Hyper-v虚拟机上进行操作,发现不能连网,自己立马想到了是不是没有虚拟机上没有和主机共享无线网 ...
- linux centos5.8装yum安装mysql
默认的yum安装mysql都是5.1版本的 想要安装5.7的可以进行配置rpm包进行, mysql5.7安装路径 下面是默认的5.1安装路径 首先我们在使用yum安装的的时候会默认使用最新安装的,最 ...
- .Linode服务器的使用 网站迁移
很多建站的朋友习惯了虚拟主机的 Cpanel 面板,但是面对 VPS 都感觉无所适从.毕竟外贸人很少接触到这类知识,所以需要一个贴心的新手教程. Linode VPS:国外最好的VPS注册购买教程 撇 ...
- 第0篇 如何访问win10的C$等默认共享
近日换新机器,装了win10,但想从旧机器访问win10的\\ip\D$拷数据过去,首先发现怎么也连不上win10的共享,于是把win10防火墙中“文件和打印机共享”的“专用”(即内网)勾选上终于可以 ...
- September 23rd 2017 Week 38th Saturday
Lonely people will always remember his life occurred in each person. 寂寞的人总是会用心记住他生命中出现过的每个人. If you ...