commonJS、AMD、ES6模块使用规范

2018-05-06  本文已影响0人  RGXMG

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的引入分为三种:

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({}),一般处理下面的情况:

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

require.config({
paths: {
jquery: 'module/libs/jquery-1.3',
}
});
---------------------------
require(['jquery'],function($){});
  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进行模块化,它的特点主要为:

定义

导出内容有俩种关键字:
export const color = '#fff';
const color = '#fff';
export color as white
 export default const color = '#fff';
// export default 5;
// const color = ‘#fff’;
// export { color as default  };
使用

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

import { color } from './color';
import color from './color';
上一篇 下一篇

猜你喜欢

热点阅读