深入浅出node.js:2 模块机制

     经历了长长的后天努力过程,JavaScript不断被类聚和抽象,以更好地组织业务逻辑。从另一个角度而言,它也道出了JavaScript先天就缺乏一项功能:模块。

     在其他高级语言中,Java有类文件,Python有import机制,Ruby有require,PHP有include和require。而JavaScript通过<script>标签引入代码的方式显得杂乱无章,语言自身毫无组织和约束能能力。不得不用命名空间等方式人为地约束代码,以求达到安全和易用的目的。

2.1 CommonJS规范

    官方规范(ECMAScript)后端JavaCript的规范,缺乏:

  • 没有模块系统
  • 标准库较少:
  • 没有标准接口:
  • 缺乏包管理系统:基本没有自动加载和安装依赖的能力

    为此提出CommonJS,目前,它依旧在成长中,这些规范涵盖了模块、二进制、Buffer、字符集编码、IO流、进程环境、文件系统、套接字、单元测试、Web服务器网关接口、包管理等。


     CommonJS的模块规范:主要分为模块引用、模块定义和模块标识3部分。

2.2 Node的模块实现

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

    分为核心模块(启动时加载)和文件模块(用户编写的,动态加载)

    优先从缓存加载:浏览器仅仅缓存文件,而Node缓存的是编译和执行之后的对象。

    路径分析和文件定位:

    模块编译:Node会新建一个模块对象,然后根据路径载入并编译,缓存在Module._cache对象上,以提高二次引入的性能。

2.3 核心模块

   分为C/C++编写的(src目录下)和JavaScript编写(lib目录下)

   JavaScript核心模块的编译过程:

   C/C++核心模块的编译过程:

   核心模块的引入:require("os")

   编写核心模块:

2.4 C/C++扩展模块

    JavaScript的一个典型弱点就是位运算,只有double型的数据类型,在进行位运算的过程中,需要将double型转换为int型

   应用中会频繁出现位运算的需求。


2.5 模块调用栈

   模块之间的调用关系

   

2.6 包与NPM

    CommonJS的包规范的定义:有包结构和包描述文件两个部分组成。


      包结构:

  • package.json:包描述文件
  • bin:
  • lib:存放JavaScript代码的目录
  • doc:
  • test:

      包描述文件与NPM:P51


2.7 前后端共用模块

     模块的侧重点:

     AMD规范:CommonJS模块规范的一个延伸     

     CMD规范有国内的玉伯提出

     兼容多种模块规范:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值