今天读了《深入浅出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. EOS 用户权限相关命令

    首先,环境相关的配置请参考https://www.cnblogs.com/hbright/p/9266420.html 在这里,我们一起看年EOS权限相关的东东.我们先查看hml这个用户的相关信息 h ...

  2. 查询缓存及索引:MySQL系列之九

    一.MySQL的架构 连接器 连接池,安全认证.线程池.连接限制.检查内存.缓存 SQL接口 DML.DDL SQL解析器,对SQL语句的权限检查.解析为二进制程序 优化器,优化访问路径 缓存cach ...

  3. git教程1-gitlab部署

    https://about.gitlab.com/install/#centos-7 https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/ gitla ...

  4. 【经验总结】tcp_tw_recycle参数引发的故障

    tcp_tw_recycle参数引发的故障 By Eric 故障描述: 2010年9月7日,新上线的手机游戏论坛有部分地区用户反应登陆游戏时出现不能登陆或登陆超时等情况,观察用户同时在线数量开始下降情 ...

  5. 01-----jQuery介绍

    安装node.js cmd查看 node -v npm -v npm init --yes     初始化 npm install jquery --save   1.为什么要使用jQuery    ...

  6. 新手写AIDL构建失败:...aidl.exe'' finished with non-zero exit value 1

    最近学习aidl,写demo后编译报错,跟着<Android开发艺术探索>以及网上的一些aidl详解博客敲完后一直编译不过,错误日志如下: Process 'command 'C:\Use ...

  7. c++概念字符串操作 (转)

    本文转自:http://www.jb51.net/article/37410.htm 一.char_traits 字符特征类 1)意义:包装特定串元素的通用行为界面,以便容器实现时依据特征信息而执行特 ...

  8. [PHP]使用日志进行调试

    两种方法: 1.利用自定义函数: //写日志,打印字符串function writelog($str){ $open=fopen("log.txt","a+") ...

  9. drupal优化全攻略

    下面是drupal优化的一些经验.分四大部分来讲. 第一部分:Drupal系统本身的设置来达到优化 第二部分:针对php代码进行的优化 第三部分:针对MYSQL数据库进行的优化 第四部分:针对网站架构 ...

  10. Unity C# 反射

    什么是反射 在.NET中的反射也可以实现从对象的外部来了解对象(或程序集)内部结构的功能,哪怕你不知道这个对象(或程序集)是个什么东西,另外.NET中的反射还可以运态创建出对象并执行它其中的方法. 反 ...