-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcmd.js
75 lines (61 loc) · 2.13 KB
/
cmd.js
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
var amd = require('fis3-hook-amd/amd.js');
var lang = fis.compile.lang;
var rRequire = /"(?:[^\\"\r\n\f]|\\[\s\S])*"|'(?:[^\\'\n\r\f]|\\[\s\S])*'|(\/\/[^\r\n\f]+|\/\*[\s\S]+?(?:\*\/|$))|\b(require\.async|require|seajs\.use)\s*\(\s*("(?:[^\\"\r\n\f]|\\[\s\S])*"|'(?:[^\\'\n\r\f]|\\[\s\S])*'|\[[\s\S]*?\])\s*/g;
var cmd = module.exports = function(info, conf) {
var file = info.file;
var shimed = conf.shim && conf.shim[file.subpath];
// 先进行 amd 解析,基本上一致的,除了 seajs.use 和 require.async
try {
// 用户主动配置了 shim 那么说明目标文件一定是模块化 js
shimed && (file.isMod = true);
amd.apply(amd, arguments);
} catch(e) {
// I don't care.
}
var content = info.content;
info.content = content.replace(rRequire, function(m, comment, type, params) {
if (type) {
switch (type) {
case 'require.async':
var info = parseParams(params);
m = 'require.async([' + info.params.map(function(v) {
var type = lang.jsAsync;
return type.ld + v + type.rd;
}).join(',') + ']';
break;
case 'seajs.use':
var info = parseParams(params);
var hasBrackets = info.hasBrackets;
m = 'seajs.use(' + (hasBrackets ? '[' : '') + info.params.map(function(v) {
var type = lang.jsAsync;
return type.ld + v + type.rd;
}).join(',') + (hasBrackets ? ']' : '');
break;
case 'require':
var info = parseParams(params);
var async = info.hasBrackets;
m = 'require(' + (async ? '[' : '') + info.params.map(function(v) {
var type = lang[async ? 'jsAsync' : 'jsRequire'];
return type.ld + v + type.rd;
}).join(',') + (async ? ']' : '');
break;
}
}
return m;
});
};
function parseParams(value) {
var hasBrackets = false;
var params = [];
value = value.trim().replace(/(^\[|\]$)/g, function(m, v) {
if (v) {
hasBrackets = true;
}
return '';
});
params = value.split(/\s*,\s*/);
return {
params: params,
hasBrackets: hasBrackets
};
}