一、缘起:JavaScript的模块化
JavaScript最初只是用来执行网页中的一些脚本。互联网发展之初,网页大多是静态的,大量的逻辑在web服务器端完成,所以在浏览器端执行的脚本相对简单。但是随着技术的发展,尤其是Ajax异步加载技术的大量应用,浏览器端的JS代码变得越来越复杂,以前相对简单的静态页面也进化成功能复杂的WebApp。导致模块化开发和管理JS代码的需求越来越强烈。
但是,JavaScript并不像其他高级语言那样有原生的模块化支持(比如C语言中的include,Java中的import)。于是一些第三方库就来JS解决模块化问题。这些模块化的解决方案主要分为:AMD和CMD两种模块化规范。
AMD是“Asynchronous Module Definition”的简称,它是RequireJS在推广过程中提出的概念,主要是解决浏览器端的异步模块定义和加载。
CMD是“Common Module Definition”的简称,它是Sea.js在推广过程中提出的概念,主要专注于服务器端(node.js)模块定义。
二、CommonJS和Browserify
了解了JavaScprit的AMD和CMD模块化机制后,再来理解CommonJS就很容易了。没错,它是遵循CMD规范的模块化库。面向Server端开发。
三、Browserify
CommonJS既然是面向Server端的,基于CommonJS开发的JS代码是无法直接在浏览器端执行的。而Browserify就是一个可以将CommonJS代码转成浏览器端可执行的代码。这个转换过程有时也被称作编译。
四、ES6
随着JavaScript模块化应用的变得越来越广泛,JavaScript语言标准规范也开始在语言层面上对模块化的支持,即下一代“JavaScript”。这里顺便介绍一下语言标准组织ECMA。ECMAScript是对所有浏览器端的脚本语言定义的语言标准。JavaScript只是这一语言标准的一种实现而已。新一代的ECMAScript语言标准,其版本号从6.0开始,即新一代语言标准全称是:ESMAScript6.0,简称ES6。ES6的第一版是2015年6月发布的(ES2015),此后2016年,2017年也都有发布(做了些小修改)。所以ES6是真正代表下一代的JavaScript。
虽然ES6引入了新的语言特性,但是现有的浏览器都还不支持,所以需要把ES6代码转成ES5版本的JavaScript代码才行。当前有多个转码器可以实现ES6到ES5的转码。典型代表有:Babel,Traceur。
|