Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
b38055cd
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b38055cd
编写于
6月 08, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Extract module ids and wrap around bundled code in a function to aid in minification
上级
982f714f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
181 addition
and
2 deletion
+181
-2
build/lib/bundle.js
build/lib/bundle.js
+86
-1
build/lib/bundle.ts
build/lib/bundle.ts
+95
-1
未找到文件。
build/lib/bundle.js
浏览文件 @
b38055cd
...
@@ -86,10 +86,95 @@ function emitEntryPoints(modules, entryPoints) {
...
@@ -86,10 +86,95 @@ function emitEntryPoints(modules, entryPoints) {
}
}
});
});
return
{
return
{
files
:
removeDuplicateTSBoilerplate
(
result
),
files
:
extractStrings
(
removeDuplicateTSBoilerplate
(
result
)
),
bundleData
:
bundleData
bundleData
:
bundleData
};
};
}
}
function
extractStrings
(
destFiles
)
{
var
parseDefineCall
=
function
(
moduleMatch
,
depsMatch
)
{
var
module
=
moduleMatch
.
replace
(
/^"|"$/g
,
''
);
var
deps
=
depsMatch
.
split
(
'
,
'
);
deps
=
deps
.
map
(
function
(
dep
)
{
dep
=
dep
.
trim
();
dep
=
dep
.
replace
(
/^"|"$/g
,
''
);
dep
=
dep
.
replace
(
/^'|'$/g
,
''
);
var
prefix
=
null
;
var
_path
=
null
;
var
pieces
=
dep
.
split
(
'
!
'
);
if
(
pieces
.
length
>
1
)
{
prefix
=
pieces
[
0
]
+
'
!
'
;
_path
=
pieces
[
1
];
}
else
{
prefix
=
''
;
_path
=
pieces
[
0
];
}
if
(
/^
\.\/
/
.
test
(
_path
)
||
/^
\.\.\/
/
.
test
(
_path
))
{
var
res
=
path
.
join
(
path
.
dirname
(
module
),
_path
).
replace
(
/
\\
/g
,
'
/
'
);
return
prefix
+
res
;
}
return
prefix
+
_path
;
});
return
{
module
:
module
,
deps
:
deps
};
};
destFiles
.
forEach
(
function
(
destFile
,
index
)
{
if
(
!
/
\.
js$/
.
test
(
destFile
.
dest
))
{
return
;
}
if
(
/
\.
nls
\.
js$/
.
test
(
destFile
.
dest
))
{
return
;
}
// Do one pass to record the usage counts for each module id
var
useCounts
=
{};
destFile
.
sources
.
forEach
(
function
(
source
)
{
var
matches
=
source
.
contents
.
match
(
/define
\((
"
[^
"
]
+"
)
,
\s
*
\[(((
,
)?(
"|'
)[^
"'
]
+
(
"|'
))
+
)\]
/
);
if
(
!
matches
)
{
return
;
}
var
defineCall
=
parseDefineCall
(
matches
[
1
],
matches
[
2
]);
useCounts
[
defineCall
.
module
]
=
(
useCounts
[
defineCall
.
module
]
||
0
)
+
1
;
defineCall
.
deps
.
forEach
(
function
(
dep
)
{
useCounts
[
dep
]
=
(
useCounts
[
dep
]
||
0
)
+
1
;
});
});
var
sortedByUseModules
=
Object
.
keys
(
useCounts
);
sortedByUseModules
.
sort
(
function
(
a
,
b
)
{
return
useCounts
[
b
]
-
useCounts
[
a
];
});
var
replacementMap
=
{};
sortedByUseModules
.
forEach
(
function
(
module
,
index
)
{
replacementMap
[
module
]
=
index
;
});
destFile
.
sources
.
forEach
(
function
(
source
)
{
source
.
contents
=
source
.
contents
.
replace
(
/define
\((
"
[^
"
]
+"
)
,
\s
*
\[(((
,
)?(
"|'
)[^
"'
]
+
(
"|'
))
+
)\]
/
,
function
(
_
,
moduleMatch
,
depsMatch
)
{
var
defineCall
=
parseDefineCall
(
moduleMatch
,
depsMatch
);
return
"
define(__m[
"
+
replacementMap
[
defineCall
.
module
]
+
"
], __M([
"
+
defineCall
.
deps
.
map
(
function
(
dep
)
{
return
replacementMap
[
dep
];
}).
join
(
'
,
'
)
+
"
])
"
;
});
});
destFile
.
sources
.
unshift
({
path
:
null
,
contents
:
[
'
(function() {
'
,
(
"
var __m =
"
+
JSON
.
stringify
(
sortedByUseModules
)
+
"
;
"
),
"
var __M = function(deps) {
"
,
"
var result = [];
"
,
"
for (var i = 0, len = deps.length; i < len; i++) {
"
,
"
result[i] = __m[deps[i]];
"
,
"
}
"
,
"
return result;
"
,
"
};
"
].
join
(
'
\n
'
)
});
destFile
.
sources
.
push
({
path
:
null
,
contents
:
'
}).call(this);
'
});
});
return
destFiles
;
}
function
removeDuplicateTSBoilerplate
(
destFiles
)
{
function
removeDuplicateTSBoilerplate
(
destFiles
)
{
// Taken from typescript compiler => emitFiles
// Taken from typescript compiler => emitFiles
var
BOILERPLATE
=
[
var
BOILERPLATE
=
[
...
...
build/lib/bundle.ts
浏览文件 @
b38055cd
...
@@ -185,11 +185,105 @@ function emitEntryPoints(modules:IBuildModuleInfo[], entryPoints:IEntryPointMap)
...
@@ -185,11 +185,105 @@ function emitEntryPoints(modules:IBuildModuleInfo[], entryPoints:IEntryPointMap)
});
});
return
{
return
{
files
:
removeDuplicateTSBoilerplate
(
result
),
files
:
extractStrings
(
removeDuplicateTSBoilerplate
(
result
)
),
bundleData
:
bundleData
bundleData
:
bundleData
};
};
}
}
function
extractStrings
(
destFiles
:
IConcatFile
[]):
IConcatFile
[]
{
let
parseDefineCall
=
(
moduleMatch
:
string
,
depsMatch
:
string
)
=>
{
let
module
=
moduleMatch
.
replace
(
/^"|"$/g
,
''
);
let
deps
=
depsMatch
.
split
(
'
,
'
);
deps
=
deps
.
map
((
dep
)
=>
{
dep
=
dep
.
trim
();
dep
=
dep
.
replace
(
/^"|"$/g
,
''
);
dep
=
dep
.
replace
(
/^'|'$/g
,
''
);
let
prefix
:
string
=
null
;
let
_path
:
string
=
null
;
let
pieces
=
dep
.
split
(
'
!
'
);
if
(
pieces
.
length
>
1
)
{
prefix
=
pieces
[
0
]
+
'
!
'
;
_path
=
pieces
[
1
];
}
else
{
prefix
=
''
;
_path
=
pieces
[
0
];
}
if
(
/^
\.\/
/
.
test
(
_path
)
||
/^
\.\.\/
/
.
test
(
_path
))
{
let
res
=
path
.
join
(
path
.
dirname
(
module
),
_path
).
replace
(
/
\\
/g
,
'
/
'
);
return
prefix
+
res
;
}
return
prefix
+
_path
;
});
return
{
module
:
module
,
deps
:
deps
};
};
destFiles
.
forEach
((
destFile
,
index
)
=>
{
if
(
!
/
\.
js$/
.
test
(
destFile
.
dest
))
{
return
;
}
if
(
/
\.
nls
\.
js$/
.
test
(
destFile
.
dest
))
{
return
;
}
// Do one pass to record the usage counts for each module id
let
useCounts
:
{[
moduleId
:
string
]:
number
;}
=
{};
destFile
.
sources
.
forEach
((
source
)
=>
{
let
matches
=
source
.
contents
.
match
(
/define
\((
"
[^
"
]
+"
)
,
\s
*
\[(((
,
)?(
"|'
)[^
"'
]
+
(
"|'
))
+
)\]
/
);
if
(
!
matches
)
{
return
;
}
let
defineCall
=
parseDefineCall
(
matches
[
1
],
matches
[
2
]);
useCounts
[
defineCall
.
module
]
=
(
useCounts
[
defineCall
.
module
]
||
0
)
+
1
;
defineCall
.
deps
.
forEach
((
dep
)
=>
{
useCounts
[
dep
]
=
(
useCounts
[
dep
]
||
0
)
+
1
;
});
});
let
sortedByUseModules
=
Object
.
keys
(
useCounts
);
sortedByUseModules
.
sort
((
a
,
b
)
=>
{
return
useCounts
[
b
]
-
useCounts
[
a
];
});
let
replacementMap
:
{[
moduleId
:
string
]:
number
;}
=
{};
sortedByUseModules
.
forEach
((
module
,
index
)
=>
{
replacementMap
[
module
]
=
index
;
});
destFile
.
sources
.
forEach
((
source
)
=>
{
source
.
contents
=
source
.
contents
.
replace
(
/define
\((
"
[^
"
]
+"
)
,
\s
*
\[(((
,
)?(
"|'
)[^
"'
]
+
(
"|'
))
+
)\]
/
,
(
_
,
moduleMatch
,
depsMatch
)
=>
{
let
defineCall
=
parseDefineCall
(
moduleMatch
,
depsMatch
);
return
`define(__m[
${
replacementMap
[
defineCall
.
module
]}
], __M([
${
defineCall
.
deps
.
map
(
dep
=>
replacementMap
[
dep
]).
join
(
'
,
'
)}
])`
;
});
});
destFile
.
sources
.
unshift
({
path
:
null
,
contents
:
[
'
(function() {
'
,
`var __m =
${
JSON
.
stringify
(
sortedByUseModules
)}
;`
,
`var __M = function(deps) {`
,
` var result = [];`
,
` for (var i = 0, len = deps.length; i < len; i++) {`
,
` result[i] = __m[deps[i]];`
,
` }`
,
` return result;`
,
`};`
].
join
(
'
\n
'
)
});
destFile
.
sources
.
push
({
path
:
null
,
contents
:
'
}).call(this);
'
});
});
return
destFiles
;
}
function
removeDuplicateTSBoilerplate
(
destFiles
:
IConcatFile
[]):
IConcatFile
[]
{
function
removeDuplicateTSBoilerplate
(
destFiles
:
IConcatFile
[]):
IConcatFile
[]
{
// Taken from typescript compiler => emitFiles
// Taken from typescript compiler => emitFiles
let
BOILERPLATE
=
[
let
BOILERPLATE
=
[
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录