Skip to content

Commit f131621

Browse files
committed
update
1 parent ed5bd99 commit f131621

File tree

6 files changed

+382
-0
lines changed

6 files changed

+382
-0
lines changed
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
define(function( require, exports, module){
2+
var age = "40";
3+
exports.age = age;
4+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
define(function( require, exports, module){
2+
var a = require("a");
3+
console.log(a);
4+
var sex = "男";
5+
exports.sex = sex;
6+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<title></title>
6+
</head>
7+
<body>
8+
<script src="startUp.js"></script>
9+
<script>
10+
startUp.config({
11+
paths: {
12+
"static": "common/js"
13+
}
14+
});
15+
startUp.use(["static/a"], function(a) { //路径短名称配置
16+
console.log(a)
17+
});
18+
</script>
19+
</body>
20+
</html>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,288 @@
1+
(function(global) {
2+
var startUp = global.startUp = {
3+
version: "1.0.1",
4+
}
5+
var data = {}; //配置信息
6+
var cache = {};
7+
var anonymousMeta = {};
8+
var status = {
9+
FETCHED: 1,
10+
SAVED: 2,
11+
LOADING: 3,
12+
LOADED: 4,
13+
EXECUTING: 5,
14+
EXECUTED: 6,
15+
}
16+
17+
var isArray = function(obj) {
18+
return toString.call(obj) === "[object Array]";
19+
}
20+
21+
var isFunction = function(obj) {
22+
return toString.call(obj) === "[object Function]";
23+
}
24+
25+
var isString = function(obj) {
26+
return toString.call(obj) === "[object String]";
27+
}
28+
29+
function scripts() {
30+
return document.getElementsByTagName('script');
31+
}
32+
33+
34+
function parseAlias(id) {
35+
var alias = data.alias;
36+
return alias && isString(alias[id]) ? alias[id] : id;
37+
}
38+
39+
var PATHS_RE = /^([^\/:]+)(\/.+)$/;
40+
41+
function parsePaths(id) {
42+
var paths = data.paths;
43+
if (paths && (m = id.match(PATHS_RE)) && isString(paths[m[1]])) {
44+
id = paths[m[1]] + m[2]
45+
}
46+
return id;
47+
}
48+
49+
function normalize(path) {
50+
var last = path.length - 1;
51+
var lastC = path.charAt(last);
52+
return (lastC === "/" || path.substring(last - 2) === ".js") ? path : path + ".js";
53+
54+
}
55+
56+
function addBase(id, uri) {
57+
var result = data.baseUrl ? data.cwd + data.baseUrl + id : data.cwd + id;
58+
return result;
59+
}
60+
61+
var DOT_RE = /\/.\//g;
62+
function relapath(path) {
63+
path = path.replace(DOT_RE, "/");
64+
return path;
65+
}
66+
67+
//路径解析 API b.js == child
68+
startUp.resolve = function(child, parent) {
69+
if (!child) return "";
70+
child = parseAlias(child);
71+
child = parsePaths(child);
72+
child = normalize(child);
73+
return addBase(child, parent);
74+
}
75+
76+
77+
//
78+
startUp.request = function(url, callback) {
79+
var node = document.createElement("script");
80+
node.src = url;
81+
document.body.appendChild(node);
82+
node.onload = function() {
83+
callback();
84+
}
85+
}
86+
87+
function Module(uri, deps) {
88+
this.uri = uri;
89+
this.deps = deps || [];
90+
this.exports = null;
91+
this.status = 0;
92+
this._waitings = {};
93+
this._remain = 0;
94+
}
95+
96+
Module.prototype.load = function() {
97+
var m = this;
98+
m.status = status.LOADING;
99+
var uris = m.resolve();
100+
var len = m._remain = uris.length;
101+
var seed;
102+
for (var i = 0; i < len; i++) {
103+
seed = Module.get(uris[i]);
104+
seed.e = true;
105+
if (seed.status < status.LOADED) {
106+
seed._waitings[m.uri] = seed._waitings[m.uri] || 1;
107+
} else {
108+
m._remain--;
109+
}
110+
}
111+
if (m._remain == 0) {
112+
m.onload();
113+
};
114+
115+
var requestCache = {};
116+
for (var i = 0; i < len; i++) {
117+
seed = Module.get(uris[i]);
118+
if (seed.status < status.FETCHED) {
119+
seed.fetch(requestCache);
120+
}
121+
}
122+
123+
for (uri in requestCache) {
124+
requestCache[uri]();
125+
}
126+
}
127+
128+
Module.prototype.fetch = function(requestCache) {
129+
var m = this;
130+
m.status = status.FETCHED;
131+
var uri = m.uri;
132+
requestCache[uri] = sendRequest;
133+
134+
function sendRequest() {
135+
startUp.request(uri, onRequest);
136+
}
137+
138+
function onRequest() {
139+
if (anonymousMeta) {
140+
m.save(uri, anonymousMeta);
141+
}
142+
m.load();
143+
}
144+
}
145+
146+
Module.prototype.onload = function() {
147+
var mod = this;
148+
mod.status = status.LOADED;
149+
if (mod.callback) {
150+
mod.callback();
151+
}
152+
var waitings = mod._waitings;
153+
var key, m;
154+
for (key in waitings) {
155+
var m = cache[key];
156+
m._remain -= waitings[key];
157+
if (m._remain == 0) {
158+
m.onload();
159+
}
160+
}
161+
162+
}
163+
164+
Module.prototype.save = function(uri, meta) {
165+
var mod = Module.get(uri);
166+
mod.uri = uri;
167+
mod.deps = meta.deps || [];
168+
mod.factory = meta.factory;
169+
mod.status = status.SAVED;
170+
}
171+
172+
Module.prototype.exec = function() {
173+
var module = this;
174+
if (module.status >= status.EXECUTING) {
175+
return module.exports;
176+
}
177+
module.status = status.EXECUTING;
178+
var uri = module.uri;
179+
180+
function require(id) {
181+
return Module.get(require.resolve(id)).exec();
182+
}
183+
184+
require.resolve = function(id) {
185+
return startUp.resolve(id, uri);
186+
}
187+
188+
var factory = module.factory;
189+
var exports = isFunction(factory) ? factory(require, module.exports = {}, module) : factory;
190+
191+
if (exports === undefined) {
192+
exports = module.exports;
193+
}
194+
module.exports = exports;
195+
module.status = status.EXECUTED;
196+
return exports;
197+
}
198+
199+
Module.prototype.resolve = function() {
200+
var mod = this;
201+
var ids = mod.deps;
202+
var uris = [];
203+
for (var i = 0; i < ids.length; i++) {
204+
uris[i] = startUp.resolve(ids[i], mod.uri);
205+
}
206+
return uris;
207+
}
208+
209+
Module.define = function(factory) {
210+
var deps;
211+
if (isFunction(factory)) {
212+
deps = parseDependencies(factory.toString());
213+
}
214+
var meta = {
215+
id: "",
216+
uri: "",
217+
deps: deps,
218+
factory: factory
219+
}
220+
anonymousMeta = meta;
221+
}
222+
223+
Module.get = function(uri, deps) {
224+
return cache[uri] || (cache[uri] = new Module(uri, deps));
225+
}
226+
227+
Module.use = function(deps, callback, uri) {
228+
var m = Module.get(uri, isArray(deps) ? deps : [deps]);
229+
m.callback = function() {
230+
var exports = [];
231+
var uris = m.resolve();
232+
for (var i = 0; i < uris.length; i++) {
233+
exports[i] = cache[uris[i]].exec();
234+
}
235+
if (callback) {
236+
callback.apply(global, exports);
237+
}
238+
}
239+
m.load();
240+
}
241+
242+
var _cid = 0;
243+
244+
function cid() {
245+
return _cid++;
246+
};
247+
248+
//data.preload = []; 预加载的模块
249+
data.cwd = document.URL.match(/[^?]*\//)[0];
250+
Module.preload = function(callback) {
251+
var preload = data.preload || []; //["c.js"]
252+
var length = preload.length;
253+
if (length){ //预先加载的模块
254+
Module.use(preload, function(){ //"c.js"
255+
preload.splice(0, length); //[]
256+
callback();
257+
}, data.cwd + "_use_" + cid());
258+
}else{
259+
callback();
260+
}
261+
};
262+
263+
startUp.use = function(list, callback) {
264+
Module.preload(function() {
265+
Module.use(list, callback, data.cwd + "_use_" + cid());
266+
});
267+
}
268+
269+
startUp.config = function(options) {
270+
var key, curr;
271+
for (key in options) {
272+
curr = options[key];
273+
data[key] = curr;
274+
}
275+
}
276+
277+
var REQUIRE_RE = /\brequire\s*\(\s*(["'])(.+?)\1\s*\)/g;
278+
279+
function parseDependencies(code) {
280+
var ret = []
281+
code.replace(REQUIRE_RE, function(m, m1, m2) {
282+
if (m2) ret.push(m2);
283+
});
284+
return ret
285+
};
286+
287+
global.define = Module.define;
288+
})(this);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
1��������ͻ
2+
������ =�� ȫ�� �ֲ� ��������
3+
4+
a.js ret
5+
b.js ret
6+
7+
demo.html ret ����
8+
9+
������ ������ ��ÿ���ű��ļ�����һ�������������� === ����������ռ�
10+
a.js = {} �ӿڶ���
11+
b.js = {} �ӿڶ��� ���Ⱪ©ʲô���Ľӿ�
12+
13+
14+
15+
2�������
16+
17+
jQuery.js //script
18+
jQuery.validata.js ���
19+
20+
demo.html
21+
22+
23+
a.js
24+
require(b.js ) //���� deps {} �ӿڶ���
25+
26+
27+
28+
29+
������
30+
31+
32+
����������ռ�
33+
var obj = {
34+
xxxx1:{
35+
ooo1:function(){}
36+
},
37+
xxxx2��{
38+
ooo2:function(){}
39+
}
40+
}
41+
42+
obj. xxxx1.ooo1()
43+
44+
45+
46+
47+
48+
49+
50+
51+
52+
53+
54+
55+
56+
57+
58+
59+
60+
61+
62+
63+
64+

0 commit comments

Comments
 (0)