JavaScript模块化规范

JavaScript模块化规范主要遵循CommonJS和AMD规范。

CommonJS规范-服务器端JavaScript规范

Node.js是一个服务器端JavaScript项目,采用了CommonJS标准实现其模块系统。

CommonJS中采用一个全局require方法来加载模块,主要由原生模块module来实现和完成,该模块在启动时已经被加载。

模块主要分为两类:原生模块,文件模块。

1.原生模块

原生模块也是Node.js中最核心的模块。原生模块在Node.js源代码编译的时候编译进了二进制执行文件,加载的速度最快。

Node.js中存在许多原生模块,例如:http,net,os,path,fs, module等等,其引用方式为var fs =
require(‘fs‘);

2.文件模块

文件模块是动态加载的,加载速度比原生模块慢。但是Node.js对原生模块和文件模块都进行了缓存,在第二次require该模块时,是不会有重复开销。

文件模块可细分为3类。这三类文件模块以文件后缀来区分,Node.js会根据后缀名来决定加载方法。

.js。通过fs模块同步读取js文件并编译执行。

.node。通常为npm安装的第三方模块。

.json。读取文件,调用JSON.parse解析加载。

虽然Node.js使用require方法引入模块的方式看似简单,但内部的加载却并不简单,且其中的优先级也不一样。

AMD规范-浏览器端JavaScript规范

CommonJS中模块存放在本地,使用同步方式加载模块,其加载时间基本相当于磁盘IO时间,这不会存在问题,但是如果环境是浏览器,则文件的加载受制于网络因素,如果网络加载比较慢,则可导致浏览器处于假死状态,因此浏览器端只能采用异步加载模块的方式。

AMD:Asynchronous Module
Definition(异步模块定义)。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:require([module], callback);

第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js。

require.js采用AMD规范实现模块加载,其采用define函数来定义。define函数接受两个参数,第一个参数为依赖数组,第二个参数为待定义的模块函数。如果没有依赖模块,则第一个参数也可以省略。

参考:

http://www.infoq.com/cn/articles/nodejs-module-mechanism

http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html

http://nodejs.org/api/modules.html

时间: 2024-12-04 16:03:35

JavaScript模块化规范的相关文章

浅谈javascript - 模块化规范

一,JS模块化演变过程 1.普通函数封装 1 function fn1(){ 2 3 } 4 5 function fn2(){ 6 7 } 最初的这种普通函数封装的缺点很明显:污染了全局变量,无法避免的会与其他模块发生变量名冲突,而且自身模块成员之间没有任何联系,,说白了就是没有做到"高内聚,低耦合"原则 2.对象 1 var myModule = { 2 var1: 1, 3 var2: 2, 4 fn1: function(){ 5 6 }, 7 fn2: function(){

javaScript模块化规范ADM与CMD介绍

模块化:模块化是指在解决某一个复杂问题时,依照一种分类的思维把问题进行系统性的分解处理,可以想象一个巨大的系统代码,被整合优化分割成逻辑性很强的模块时,对于软件是一种何等意义的存在. 模块化系统所必须的能力: 1.定义封装的模块 2.定义新模块对其他模块的依赖 3.可对其他模块的引入支持 AMD模块规范:其实就是异步模块定义,所有的模块将被异步加载,模块加载不影响后面语句运行,所有依赖某些模块的语句均放置在回调函数中. AMD规范定义了一个全局变量define函数,格式为:define(id, 

Javascript模块化编程-规范

实现Javascript模块化,固然很重要,但是怎样才能实现国际上都能认可的模块化呢?模块化编程规范随应运而生. 目前Javascript模块化规范主要有两种:CommonJS和AMD. CommonJS: 09年,美国程序开发人员Ryan Dahl创造了node.js项目,将JS运用于服务器端. 由于后台服务端的业务比较复杂,如果没有模块化编程规范,后台维护和开发将变得异常艰难. node.js的模块系统,就是参照CommonJS规范实现的.在CommonJS中,require(),用于加载模

JS模块化规范CMD之SeaJS

1. 在接触规范之前,我们用模块化来封装代码大多为如下: ;(function (形参模块名, 依赖项, 依赖项) { // 通过 形参模块名 修改模块 window.模块名 = 形参模块名 })(window.模块名 || {}, 依赖项, 依赖项) 分号是什么作用? 答:为了防止前面的代码没有添加分号造成语法解析错误,也可能会是 "!", "+" 等 为什么要将代码放入一个自执行函数中 答:为了避免全局命名空间污染,核心就是利用函数的私有作用域 为什么将依赖项作

Javascript模块化编程(二):AMD规范

作者: 阮一峰 日期: 2012年10月30日 这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块. 但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套!考虑到Javascript模块现在还没有官方规范,这一点就更重要了. 目前,通行的Javascript模块规范共有两种

Javascript模块化开发 – AMD规范

通行的Javascript模块规范共有两种:CommonJS和AMD. 2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端编程.这标志"Javascript模块化编程"正式诞生.因为老实说,在浏览器环境下,没有模块也不是特别大的问题,毕竟网页程序的复杂性有限:但是在服务器端,一定要有模块,与操作系统和其他应用程序互动,否则根本没法编程. node.js的模块系统,就是参照CommonJS规范实现的.在CommonJS中,有一个全局性

Javascript模块化编程系列三: CommonJS & AMD 模块化规范描述

CommonJS Module 规范 CommonJS 的模块化规范描述在Modules/1.1.1 中 目前实现此规格的包有: Yabble,CouchDB,Narwhal (0.2), Wakanda, TeaJS (formerly v8cgi), CommonScript, PINF JS Loader, SeaJS, ArangoDB, sorrow.js 注意,这里并没有找到 requireJS,因为它使用的是AMD规范. 此规范定义的具体内容包括: Requirerequire是一

Javascript的AMD模块化规范详解

本文和大家分享的主要是Javascript中的AMD模块化规范相关内容,一起来看看吧,希望对大家学习javascript有所帮助. 现今通行的模块化规范有三种AMD.CMD和Commonjs(AMD和CMD是Commonjs衍生出来的模块化,Commonjs应该也是CMD) 服务器环境(CommonJs) 2009年,当nodejs被美国程序员Ryan Dah开发出来后,javascript也可以作为服务器端语言,开发服务器功能,但是为了解决服务器端的复杂性,开发Commonjs来使javasc

Javascript模块化编程(二):AMD规范(转)

这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块. 但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套!考虑到Javascript模块现在还没有官方规范,这一点就更重要了. 目前,通行的Javascript模块规范共有两种:CommonJS和AMD.我主要介绍AMD,但