第二阶段: CommonJS规范

CommonJS就是一个JavaScript模块化的规范,该规范最初是用在服务器端的node的,前端的webpack也是对CommonJS原生支持的。

  • 根据这个规范,每一个文件就是一个模块,其内部定义的变量是属于这个模块的,不会对外暴露,也就是说不会污染全局变量。

  • CommonJS的核心思想就是通过 require 方法来同步加载所要依赖的其他模块,然后通过 exports 或者 module.exports 来导出需要暴露的接口。

优点:

  • CommonJS规范在服务器端率先完成了JavaScript的模块化,解决了依赖、全局变量污染的问题,这也是js运行在服务器端的必要条件。

缺点:

  • 由于 CommonJS 是同步加载模块的,在服务器端,文件都是保存在硬盘上,所以同步加载没有问题,但是对于浏览器端,需要将文件从服务器端请求过来,那么同步加载就不适用了,所以,CommonJS是不适用于浏览器端的。

特点

  • 以文件为一个单元模块,代码运行在模块作用域内,不会污染全局变量

  • 同步加载模块,在服务端直接读取本地磁盘没问题,不太适用于浏览器

  • 模块可以加载多次,但是只会在第一次加载时运行,然后在加载,就是读取的缓存文件。需清理缓存后才可再次读取文件内容

  • 模块加载的顺序,按照其在代码中出现的顺序

  • 导出的是值的拷贝,这一点和 ES6 有着很大的不同

在浏览器中使用 CommonJS

由于浏览器不支持 CommonJS 规范,因为其根本没有 module、exports、require 等变量,

如果要使用,则必须转换格式。

Browserify是目前最常用的CommonJS格式转换的工具,

我们可以通过安装browserify来对其进行转换.

但是我们仍然需要注意,由于 CommonJS 的规范是阻塞式加载,并且模块文件存放在服务器端,可能会出现假死的等待状态(浏览器在一直下载文件)

  • npm i browserify -g

编译

  • browserify main.js -o js/bundle/main.js

或者引入

  • <script src="https://cdn.bootcdn.net/ajax/libs/require.js/2.3.6/require.js"></script>

node中的CommonJS

// 示例一//    文件名: foo.js
var $ = require('jquery');
var _ = require('underscore');//  methods
function a(){};    //    私有方法,因为它没在module.exports中 (见下面)
function b(){};    //    公共方法,因为它在module.exports中定义了
function c(){};    //    公共方法,因为它在module.exports中定义了//    暴露公共方法
module.exports = {b: b,c: c
};
// 示例二// 模块定义
// CommonJS 的规范说明,一个单独的文件就是一个模块,也就是一个单独的作用域。并且模块只有一个出口,module.exports/exports.xxx// lib/math.js
const NAME='Nealayng';
module.exports.author = NAME;
module.exports.add = (a,b)=> a+b;// 加载模块
// 加载模块使用 require 方法,该方法读取文件并且执行,返回文件中 module.exports 对象// main.js
const mathLib = require('./lib/math');
console.log(mathLib.author);//Nealyang
console.log(mathLib.add(1,2));// 3

Modularity(模块化-CommonJS规范)相关推荐

  1. JavaScript模块化-CommonJS规范

    文章目录 认识模块化开发 什么是模块化 模块化的历史 没有模块化带来的问题 CommonJS规范 CJS规范在Node的实现 模块化简单案例 exports和require本质 module.expo ...

  2. nodejs01——安装及使用、服务端及客户端、commonjs规范、fs模块的使用(文件操作及目录操作)、stream、buffer、WebServer、端口、动态资源及静态资源、头信息、请求方式

    nodejs的安装及使用 服务端及客户端 commonjs规范 fs模块的使用(文件操作及目录操作) stream buffer // Node.js介绍 Node.js 诞生于2009年,Node. ...

  3. js 多个定时器_Node.js系列深入浅出Node模块化开发——CommonJS规范

    前言 本文将为大家透彻的介绍关于Node的模块化--CommonJS的一切. 看完本文可以掌握,以下几个方面: 什么是模块化,以及没有模块化会带来哪些问题,是如何解决的: JavaScript的设计缺 ...

  4. es6 混合commjs_前端模块化——CommonJS、ES6规范

    什么叫模块化? 对于一个复杂的程序,将其按照一定的规范封装成几个文件块,每一块向外暴露一些接口,但是块的内部数据是私有的,块与块之间通过接口通信.这个过程称为模块化. 模块化的好处 CommonJS ...

  5. JavaScript进阶(十二)JS 模块化编程规范-CommonJS、AMD、CMD、ES6

    文章目录 一.前言 二.AMD-异步模块定义 三.CMD-同步模块定义 四.CommonJS 规范 五.ES6 六.拓展阅读 一.前言 AMD.CMD.CommonJs是ES5中提供的模块化编程方案, ...

  6. Modularity(模块化-AMD规范)

    第三阶段: AMD规范(Asynchronous Module Definition:异步模块定义) CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作. AMD规范则是 ...

  7. 模块化:CommonJS规范

    目录 CommonJS规范 模块使用环境区分 核心语法 如何使用 CommonJS:服务器端使用 CommonJS:浏览器端使用 CommonJS规范 模块使用环境区分 CommonJS规范中,每一个 ...

  8. JavaScript模块化 --- Commonjs、AMD、CMD、es6 modules

    随着前端js代码复杂度的提高,JavaScript模块化这个概念便被提出来,前端社区也不断地实现前端模块化,直到es6对其进行了规范,下面就介绍JavaScript模块化. 这篇文章还是希望能给大家一 ...

  9. Commonjs规范

    为什么有模块化 1.方便代码维护 2.每个功能放到一个模块内 3.解决命名问题,全局变量污染问题 常见的模块化 1.我们写方法写属性都放在对象里(单例模式) 缺陷声明的对象也有可能命名冲突,不能完全解 ...

最新文章

  1. LINUX按照物理地址预取,linux – 如何以编程方式禁用硬件预取?
  2. python写出的程序如何给别人使用-利用这10个工具,你可以写出更好的Python代码...
  3. 成功解决SQL server服务,远程过程调用失败
  4. linux菜鸟入门-1
  5. oracle 数据库中数据导出到excel
  6. [转] 标准化和归一化
  7. class对象和class文件_Class文件格式
  8. [原]CentOS 6.5 上安装 MySQL 5.6
  9. android之日志库logger
  10. 区块链 以太坊 入门知识
  11. PhantomJS其他语言调用
  12. 【瑕疵检测】基于matlab GUI OTSU织物疵点检测【含Matlab源码 860期】
  13. LintCode—合并两个排序链表(165)
  14. vasp能装在window系统里吗_vasp 5.4.4 在win10/Ubuntu 18.04上的安装
  15. 软件签名不一致是什么意思
  16. 【网络安全】SQL注入详细分析
  17. 新建Flutter项目无法导入FlutterActivity
  18. 普通PC通过USB转485串口 ModBus-RTU通信协议控制伺服电机
  19. layui外部引入_layui use 定义js外部引用函数的方法
  20. 微指数批量查询工具V1.0发布了

热门文章

  1. 消除数字鸿沟,这些开发者要让代码有“温度”
  2. 2016下半年网络规划设计师考试上午真题
  3. Vins中的FeatureTracker::readImage(const cv::Mat _img, double _cur_time)函数
  4. 统计学基础一:基础概念
  5. linux下安装python3.6
  6. REST framework(2)
  7. nginx配置:支持phpfastcgi,nginx和php-cgi通信,部分nginx常量解释
  8. 对JDBC操作数据库的简单封装
  9. javascript 打造城市选择控件,兼容IE6以及以上,谷歌,Firefox
  10. Hiernate概述