requirejs源码分析: config中shim
2016-07-17 08:25
267 查看
shim处理的源码:
//Merge shim
if (cfg.shim) {
eachProp(cfg.shim, function (value, id) {
//shim 为数组类型, 很少用。
//一般为 对象类型
//Normalize the structure
if (isArray(value)) {
value = {
deps: value
};
}
// 当前配置点有exports或 init.
// 没有初始化过exportsFn时
// 进行初始化
if ((value.exports || value.init) && !value.exportsFn) {
value.exportsFn = context.makeShimExports(value);
}
shim[id] = value;
});
config.shim = shim;
}
1. 从以上代码可以看出, exports的对象是由makeShimExports获得的
makeShimExports: function (value) {
function fn() {
var ret;
if (value.init) {
ret = value.init.apply(global, arguments);
}
return ret || (value.exports && getGlobal(value.exports));
}
return fn;
}
从这里可以看当有配置 init方法时, 将使用init的返回值。 不存时直接获取全局中 对象名为shim设置的exports 的对象。
//Merge shim
if (cfg.shim) {
eachProp(cfg.shim, function (value, id) {
//shim 为数组类型, 很少用。
//一般为 对象类型
//Normalize the structure
if (isArray(value)) {
value = {
deps: value
};
}
// 当前配置点有exports或 init.
// 没有初始化过exportsFn时
// 进行初始化
if ((value.exports || value.init) && !value.exportsFn) {
value.exportsFn = context.makeShimExports(value);
}
shim[id] = value;
});
config.shim = shim;
}
1. 从以上代码可以看出, exports的对象是由makeShimExports获得的
makeShimExports: function (value) {
function fn() {
var ret;
if (value.init) {
ret = value.init.apply(global, arguments);
}
return ret || (value.exports && getGlobal(value.exports));
}
return fn;
}
从这里可以看当有配置 init方法时, 将使用init的返回值。 不存时直接获取全局中 对象名为shim设置的exports 的对象。
相关文章推荐
- LeetCode 62. Unique Paths
- LeetCode 375. Guess Number Higher or Lower II
- 图片轮播(BannerView)
- 第十一次课总结(下篇)
- Intellij IDEA 14.x 菜单项中Compile、Make和Build的区别
- ueditor的图片上传(jsp)
- EasyUI 基础组件
- EasyUI 基础组件
- EasyUI 基础组件
- poj 3481 Double Queue
- Leetcode题解 303. Range Sum Query - Immutable
- [LeetCode] Guess Number Higher or Lower II 猜数字大小之二
- Leetcode题解 374. Guess Number Higher or Lower
- 虚幻4过场动画编辑器Sequencer脑图
- 虚幻4过场动画编辑器Sequencer脑图
- UVA 540 Team Queue
- Codeforces 689D Friends and Subsequences (RMQ+二分)
- StringBuffer、StringBuilder和BigDecimal
- HDU 5288 OO’s Sequence (from: 2015 Multi-University Training Contest 1)
- POJ3080 Blue Jeans