|
54 | 54 | this.children = []; |
55 | 55 | } |
56 | 56 |
|
57 | | - Module.prototype.require = function (path,cb) { |
| 57 | + var __require = Module.prototype.require = function (path,cb) { |
58 | 58 | return Module._load(path, cb, this); |
59 | 59 | }; |
60 | 60 |
|
|
103 | 103 |
|
104 | 104 | if (isArray(args[0])) { |
105 | 105 | requireList = args[0]; |
| 106 | + } else if (args[0] && typeof args[0] === 'string'){ |
| 107 | + requireList = [args[0]]; |
106 | 108 | } |
107 | | - |
| 109 | + |
| 110 | + var hasExportsRequire = []; |
| 111 | + var list = []; |
| 112 | + for (var i = 0; i < requireList.length; i++){ |
| 113 | + if (requireList[i] === 'require' || requireList[i] === 'exports'){ |
| 114 | + hasExportsRequire[i] = requireList[i]; |
| 115 | + } else { |
| 116 | + list.push(requireList[i]); |
| 117 | + } |
| 118 | + } |
| 119 | + |
| 120 | + if (hasExportsRequire.length){ |
| 121 | + requireList = list; |
| 122 | + var _cb = cb; |
| 123 | + cb = function(){ |
| 124 | + var self = this; |
| 125 | + var args = []; |
| 126 | + Array.prototype.push.apply( args, arguments ); |
| 127 | + for (var i =0; i < hasExportsRequire.length; i++){ |
| 128 | + var name = hasExportsRequire[i]; |
| 129 | + if (name){ |
| 130 | + if ( args[i]){ args[i+1] = args[i]; } |
| 131 | + args.splice(i, 1, self[name]); |
| 132 | + } |
| 133 | + } |
| 134 | + _cb.apply(this, args); |
| 135 | + }; |
| 136 | + } |
| 137 | + |
108 | 138 | definedObjects.push({ |
109 | 139 | cb : cb, |
110 | 140 | list : requireList |
|
121 | 151 | this.filename = filename; |
122 | 152 |
|
123 | 153 | var $require = function () { |
124 | | - return self.require.apply(self, arguments); |
| 154 | + return __require.apply(self, arguments); |
125 | 155 | }; |
126 | 156 |
|
127 | 157 | var el = doc.createElement('script'); |
|
135 | 165 | el.onload = el.onreadystatechange = null; |
136 | 166 |
|
137 | 167 | var _run = function () { |
| 168 | + self.require = $require; |
138 | 169 | var _fireNestedCb = function () { |
139 | 170 | var imports = self.imports; |
140 | 171 | var importLen = imports.length; |
|
188 | 219 | Array.prototype.push.apply( e, arguments ); |
189 | 220 | if (list.length) { |
190 | 221 | var mid = list.shift(); |
| 222 | + |
191 | 223 | var cb = list.length ? nested : function () { |
192 | 224 | Array.prototype.push.apply( e, arguments ); |
193 | | - var args = [$require, self.exports].concat(e); |
| 225 | + var args = [].concat(e); |
194 | 226 | callback.apply(self, args); |
195 | 227 | _fireNestedCb(); |
196 | 228 | }; |
|
200 | 232 | nested(); |
201 | 233 | return; |
202 | 234 | } |
203 | | - callback.apply(self, [$require, self.exports]); |
| 235 | + callback.apply(self); |
204 | 236 | } |
205 | 237 | _fireNestedCb(); |
206 | 238 | }; |
|
213 | 245 | } else { |
214 | 246 | el.src = filename; |
215 | 247 | } |
216 | | - |
217 | 248 | head.insertBefore(el, head.lastChild); |
218 | 249 | }; |
219 | 250 |
|
220 | 251 | Module._load = function (request, cb, parent) { |
221 | | - |
222 | 252 | if (!cb){ cb = function(){}; } |
223 | | - |
224 | 253 | if (isArray(request)) { |
225 | 254 | var e = [], nested = function () { |
226 | 255 | Array.prototype.push.apply( e, arguments ); |
|
0 commit comments