今天读了《深入浅出Nodejs》的第二章:模块机制。现在做一个简单的小结。

序:模块机制大致从这几个部分来讲:JS模块机制的由来、CommonJS AMD CMD、Node模块机制和包和npm。

1. JS模块机制的由来

由于JS先天地缺乏一项功能:模块。通过<script></script>标签引入代码的方式显得杂乱无章。社区也为JS指定了相应的规范,CommomJS的出现是其中最重要的里程碑。

2. CommomJS规范

require()方法,这个方法用来接收模块标识 ,以此来引入一个模块的API到上下文中;

exports是module的属性;

在node中,一个文件就是一个模块;

CommonJS构建的这套模块导出和引入机制使得用户不必考虑变量污染的问题。

3. Node模块实现

Node有这样的几类模块:文件模块(用户编写)、核心模块(Node提供的模块)、内建模块。加载的机制是先做路径分析,分析没有问题后,开始文件定位,文件定位没有问题后,就开始编译执行。

其中,加载文件机制有一个特点,就是优先从缓存中加载。在Node中,每一个模块都是一个对象。

4. 包和npm

包和npm是将模块连接起来的一种机制。Node是对CommomJS规范的一种具体实现,一定程度上解决了变量依赖、依赖关系等代码组织的问题 。包的出现,则是在模块的基础上,进一步组织JS代码。

5. CommomJS、AMD、CMD

CommonJS是为后端指定的规范,并不完全适合前端的应用场景。AMD最终在前端场景中胜出,是因为它是“异步模块定义”。但是AMD需要在声明引用模块的时候,指定所有的依赖;而玉伯提出的CMD则支持动态加载模块,即在需要依赖模块时,使用require()引入即可 。

Nodejs:Node.js模块机制小结的更多相关文章

  1. node.js零基础详细教程(4):node.js事件机制、node异步IO操作

    第四章 建议学习时间3小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...

  2. nodejs 使用 js 模块

    nodejs 使用 js 模块 Intro 最近需要用 nodejs 做一个爬虫,Google 有一个 Puppeteer 的项目,可以用它来做爬虫,有关 Puppeteer 的介绍网上也有很多,在这 ...

  3. 10、Node.js模块系统

    ##################################################################################介绍Node.js模块系统为了让No ...

  4. Developer - 如何自我保证Node.js模块质量

    组里正在做SaaS产品,其中一些模块(Module)是Node.js实现,这里我们主要使用Node.js实现Web Server来提供服务. 在做SaaS项目之前,组里的开发模式是传统的Deverlo ...

  5. Node Js模块讲解

    Node JS模块 所谓的Node JS模块其实就是指Node JS package,即nodejs包. 一 什么是NodeJS模块? 在说这个问题之前,我们有必要提出一个概念,即模块规范. 现阶段J ...

  6. Node.js模块

    每一个Node.js都是一个Node.js模块,包括JavaScript文件(.js).JSON文本文件(.json)和二进制模块文件(.node). mymodul.js function Hell ...

  7. 如何发布一个自定义Node.js模块到NPM(详细步骤)

    咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...

  8. 编写原生Node.js模块

    导语:当Javascript的性能需要优化,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

  9. 编写原生的Node.js模块

    导语:当Javascript的性能遭遇瓶颈,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

随机推荐

  1. 项目经验:Glyphicons字体图标改造,制造适合自己项目的字体图标

    Bootstrap对我们来说已经不陌生了,大型的项目一定会用到它.它的DOM结构,字体图标,组件,响应式布局等,很大程度上提高了WEB开发速度. 在bootstrap刚出来的时候,它拥有丰富的组件.美 ...

  2. 《SQL 进阶教程》 自连接分组排序:练习题1-2-2

    分组排序 SELECT d1.district, d1. NAME, (SELECT COUNT(d2.price) FROM district_products d2 WHERE d2.price ...

  3. codeforces1016 D. Vasya And The Matrix(思维+神奇构造)

    D. Vasya And The Matrix time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  4. 最小生成树(prim算法和kruskal算法)

    学习博客:https://www.cnblogs.com/zhangming-blog/p/5414514.html 其实就是加点法:从不属于这个集合的点中找从本集合可以找到的最小边,加入本集合 看代 ...

  5. Java面向对象_抽象类应用——模板方法模式

    概念:定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤. 去个例子分析一下这个概念: public cla ...

  6. 图片的回显。js

    l  <tr><td></td> <td> <c:if test="${editVo.pic!=''}"><img ...

  7. yii2 AR模型使用exists添加子查询与父查询关联

    有A,B两个表对应A_AR,B_AR两个模型B表interval_id对应A表id现在要查a表的数据,且没有code为a的子数据要求使用yii2的AR模型写查询: A_AR::find()->w ...

  8. 禁止form重复提交

    $("form").submit(function () { console.log("提交了"); $("input:submit").a ...

  9. 用命令行的方式将本地项目上传到git

    1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点 ...

  10. Vmware 可用的激活码

    4F207-8HJ1M-WZCP8-000N0-92Q6G 0A6Z5-8H1EJ-WZCL1-PK072-23DJG 0F0Q9-8F38L-RZXT9-4U054-ACW5F JA02E-09H4 ...