commonJS、AMD、ES6模块使用规范

commonJS:

同步模块加载 ,NodeJS,也就是服务器端广泛使用的一种模块化机制,以为模块一般都存在于本地,所以不需要考虑网络加载因素,所以为同步加载。

模块的定义

每个模块都有自己独立的作用域,除定义在global对象下的属性外,其他变量互不影响。module变量代表当前模块。

var x = 1;
var fun1 = function (value) { return value + x; }
module.exports.x = x;
moduel.exports.fun1 = fun1;

导出与使用

它要求模块化的导出必须是module.exports,这样导出对外的变量或者接口,通过require() 来导入想要使用的其他模块对外导出的变量或者接口,;定义global对象下的属性为全局属性,但不推荐使用。
require的引入分为三种:

  • 如果参数字符串以 / 开头,则表示加载的是一个位于绝对路径的模块文件。
  • 如果参数字符串以 ./ 开头,则表示加载的是一个位于相对路径的模块文件
  • 如果参数字符串不以 .// 开头,则表示加载的是一个默认提供的核心模块(node核心模块,或者通过全局安装或局部安装在node_modules目录中的模块)

AMD:

异步模块定义 ,为浏览器环境设计,RequireJS即为遵循AMD规范的模块化工具,requireJS的基本思想是,通过define方法定义模块化,通过require加载模块。

模块的定义:

通过define方法定义模块,但是按照俩种情况进行书写。

  1. 该模块独立存在,不依赖其他模块(可以返回任何值):
define(function() {
// your code....
return {
// 返回的接口
}
})
  1. 该模块依赖其他模块时():
define(['module1','module2'], function(module1, module2) {
...
return {
// 返回的接口
}
})

使用时,因为是异步调用函数的形式,所以可以使用回调函数的方式,可以添加成功,或者错误处理函数;

require(['m1','m2'], functino(m1,m2) {}, function(err) {})

同时,在define的时候,也可以在内部进行require加载模块,

var m1 =require('m1');

配置

require方法支持配置,require.config({}),一般处理下面的情况:

  • paths :为模块指定位置,可以为服务器上的地址,也可以为外部网址等等,也可以指定多个地址,防止模块加载出错。

相当于为模块指定位置和地址映射依赖关系。

require.config({
paths: {
jquery: 'module/libs/jquery-1.3',
}
});
---------------------------
require(['jquery'],function($){});
  • shim:垫片,帮助requireJS加载那些非AMD规范的库
  1. shim对象的一级属性对应两个属性: deps,exports ; deps 为数组,表示其依赖的库, exports 表示输出的对象名.
  2. shim对象的一级属性必须要有paths中的属性名称对应。
require.config({
paths:{
 ls1 :'module/libs/ls1-0.0.5-alis',
ls2::'module/libs/ls2-0.0.5-alis'
},
shim:{
'ls1':{
deps:['ls2'],
exports:'!_'
}
}
});

使用:

在index.html中通过 script 标签引入,包括require.js以及require.config的配置文件。

ES6模块

如果使用es6语法,那么则无需引入requireJS进行模块化,它的特点主要为:

  • 在模块顶级作用域中的this为undefine。
  • 单个文件为一个模块,顶级作用域声明的变量只在当前模块生效。对其他模块不影响,
  • 对外导出的变量才能被其他变量使用

定义

导出内容有俩种关键字:
  • export 导出该模块要导出的变量、函数、对象等等。
export const color = '#fff';
  • as 输出时创建别名,也适用于导入情况。
const color = '#fff';
export color as white
  • export default 该模块的默认输出值,可以为变量、函数、对象,一个模块只能导出一个默认值。默认导出的内容可以无名称,因为默认导出就代表该模块,但也可以有名称,或者使用别名 as。
 export default const color = '#fff';
// export default 5;
// const color = ‘#fff’;
// export { color as default  };
使用

在模块中使用import关键字来导出其他模块导出的内容。
分为几种情况:

  • 导入非默认内容,需要用结构的方式,因为在模块中,非默认导出的内容,都会被添加到一个变量中,用结构的方式拿出一个或多个内容。
import { color } from './color';
  • 导入默认内容,可以直接导出即可。
import color from './color';
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容