如何兼容多种模块规范

如果你也在开发模块,并且想让你的模块同时在前后端运行,那么这篇文章会让你有收获。

模块运行的环境主要有四个: NodeAMDCMD 、 普通的浏览器环境

要同时兼容这四种环境,我们只需要找出每个环境独有的特点即可进行判断:

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
;(function (name, definition) {
// 检测上下文环境是否为AMD、CMD
var hasDefine = typeof define === 'function',
// 检查上下文环境是否为Node
hasExports = typeof module !== 'undefined' && module.exports;
if (hasDefine) {
// AMD环境、CMD环境则define(definition);
define(definition);
} else if (hasExports) {
// 定义为普通Node模块 module.exports = definition();
module.exports = definition();
} else {
// 将模块的执行结果赋值在window变量中,在浏览器中this等于window对象,this[name] = definition();
this[name] = definition();
}
})('hello', function () {
var hello = function () {};
return hello;
});

本文作者:余震(Freak)
本文出处:Rockjins Blog
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN许可协议。转载请注明出处!

坚持,您的支持将鼓励我继续爬下去!