前端模块化
CommonJS模块化详解
原生 javaScript 除了浏览器api以为外的就那样了, 但是 CommonJS 的出现 带来了各种api, 使得js能够在各种平台应用上施展拳脚。 CommonJS 是一种
规范
,nodeJs 以及 Webpack 都是遵循 CommonJs规范打造。
只要在兼容 CommonJS的系统中,javaScript可以用来:
- 服务器端的应用程序
- 命令行工具
- 图形界面应用程序 (Web)
- 混合应用程序 (原生应用加壳,原生应用内嵌web页面等)
node.js
的 模块系统就是参照CommonJS规范实现的, 也就是现在的主流规范:AMD
。
node模块
首先node.js是后端的
浏览器 不支持 CommonJS 模块化规范
是因为缺少 node.js 提供的 四个用于模块化的环境变量
- module
- exports
- require
- global
实现
但可以使用一些CommonJS格式转换工具来同样使用 nodeJs类似的模块化功能
前端模块化
AMD
前端是异步加载模块的,所有 不能像服务器端那样同步加载模块。所以 异步模块加载标准 AMD 诞生了
AMD规范 最主要是由requireJS实现的
- 模块的定义
define(id?, dependencies?, factory)
- 第一个参数 id 为字符串类型,表示了模块标识,为可选参数。若不存在则模块标识应该默认定义为在加载器中被请求脚本的标识。如果存在,那么模块标识必须为顶层的或者一个绝对的标识。
- 第二个参数,dependencies ,是一个当前模块依赖的,已被模块定义的模块标识的数组字面量。
- 第三个参数,factory,是一个需要进行实例化的函数或者一个对象。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33// 无依赖模块
define( {
add : function( x, y ){
return x + y ;
}
} );
// 定义有依赖的模块
define(["alpha"], function( alpha ){
return {
verb : function(){
return alpha.verb() + 1 ;
}
}
});
// 定义数据对象模块
define({
users: [],
members: []
});
// 具名模块
define("alpha", [ "require", "exports", "beta" ], function( require, exports, beta ){
export.verb = function(){
return beta.verb();
// or:
return require("beta").verb();
}
});
// 包装模块
define(function(require, exports, module) {
var a = require('a'),
b = require('b');
exports.action = function() {};
} );
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!