【深入浅出node.js】读书摘录2 - node.js模块机制

第二章、模块机制

1.      CommonJs规范的目的是希望JavaScript能够在任何地方运行

2.      一直以来,JavaScript存在的缺陷有:

         (1)、没有模块系统

         (2)、标准库较少

         (3)、没有标准接口

         (4)、缺乏包管理系统

CommonJS规范的提出,是为了弥补当前JavaScript没有标准的缺陷,以达到向Python、Ruby和Java具备开发大型应用的基础能力,而不是停留在小脚本程序的阶段。它们期望用CommonJS API写出的应用可以具备跨宿主环境执行的能力,使得Javascript可以开发服务器端Javascript应用、命令行应用、桌面图形界面应用程序、混合应用等。

3.      TODO(CommonJS规范,查阅相关文档)

         CommonJs规范涵盖了模块、二进制、Buffer、字符集编码、I/O流、进程环境、文件系统、套接字、单元测试、Web服务器网关接口、包管理等

4、CommonJs的模块规范.

         CommonJS对模块的定义非常简单:包含了模块引用、模块定义、模块标识等3个部分。

         Var math = require(‘math’);

        

将方法挂载在exports对象上作为属性可以定义导出的方式.

exports.add = function(){

}

每个模块都有自己独立的空间,它们互不干扰。

5、Node中引用模块,需要经历路径分析、文件定位、编译执行等3个步骤。

         在Node中,模块分为两大类:一类是Node提供的模块,称为核心模块,另一类是用户编写的模块,称为文件模块。核心模块在Node源代码的编译过程中,编译进了二进制可执行文件。Node进程启动时,部分核心模块被直接加载进内存中,所以这部分核心模块引入时,文件定位和编译执行这两个步骤可以省略掉,并且在路径分析中优先判断,所以它的加载速度是最快的。文件模块则是在运行时动态加载,需要完整的路径分析,文件定位、编译执行等过程,速度比核心模块慢。

6、在模块加载的过程中,Node会优先从缓存加载,而且核心模块的缓存检查优先于文件模块的缓存检查。从缓存加载的优化策略使得二次引入时不需要路径分析、文件定位和编译执行的过程,大大提高了再次加载模块的效率。

7、require Node模块的几种方式(路径分析)

         (1)、核心模块如fs,http, path等

         (2)、以.或者..开始的相对路径

         (3)、绝对路径

         (4)、非路径形式的模块

8、可以用strace等追踪Node文件模块的路径分析和加载过程:

Strace –o trace –p node module.js

Node对文件模块的路径分析过程是从当前路径开始,逐级向上查找,直至查找到模块或者根目录

9、require Node模块的过程中,会出现标识符中不包含文件扩展名的情况。Node会按照.js, .node, .json的次序补充。在尝试的过程中,需要调用fs模块同步阻塞地判断文件是否存在,由于Node是单线程的,所以会有一定的性能问题。一个小诀窍是,在require文件模块的时候,带上模块的扩展名。

10、在编译的过程中,Node对获取的javascript文件内容进行了包装,生成的内容类似于:

(function( exports, require, module,__filename, __dirname ){

         varmath = require('math');

         exports.area= function( radius ){

                   returnMath.PI * radius * radius;

         };

});

这样每一个模块都进行了作用域的隔离,不至于污染全局变量。

11、Node对.json文件的编译最简单:Node通过fs模块同步读取JSON文件的内容之后,调用JSON.parse方法得到对象。JSON文件在用做项目的配置文件时比较有用,如果你定义了一个json文件作为配置,那么不必调用fs去异步读取和解析,直接调用require引入即可。

12、Node对模块规范的实现,在一定程度上解决了变量依赖、依赖关系等代码组织性问题。而包的出现,则在模块的基础上进一步组织了Javascript代码。

13、Node包管理工具NPM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值