// 压缩前
const testFunc = (msg) => {
const type = msg['type'];
switch (type) {
case 0:
const type = parseInt('2');
console.log(type);
break;
}
}
testFunc({ type: 0 });//输出 2
源代码使用 typescript 写的,TS 没有红线,tsc 正常,导出的 js 正常,运行正常 但是使用 UglifyJS 压缩后,代码变成了
"use strict";
var testFunc = function (t) {
t.type;//这里!!!!!
switch (e) {
case 0:
var e = parseInt("2");
console.log(e)
}
};
testFunc({ type: 0 });
第三行少了前面的声明 之后在 css-js.com 试了各种压缩方式和配置,都是这样。试过把 const 改成 let ,也不行
请问下这个属于是 ts 语法错误、js 语法错误、还是压缩工具的 Bug?
1
angel001ma 2022-10-11 15:06:51 +08:00 1
https://skalman.github.io/UglifyJS-online/
这里是正常的,应该是你装的 UglifyJS 的 bug |
2
liwenkang 2022-10-11 15:15:21 +08:00
可以把 case 里面声明的 type 换个值吗?
``` // 压缩前 const testFunc = (msg) => { const type = msg["type"]; switch (type) { case 0: const t = parseInt("2"); console.log(t); break; } }; testFunc({ type: 0 }); //输出 2 ``` ``` // 压缩后 "use strict"; var testFunc = function(t) { switch (t.type) { case 0: var e = parseInt("2"); console.log(e); } }; testFunc({ type: 0 }); // 输出 2 ``` |
4
Musong OP @angel001ma #1 好的谢谢 可能版本太老了
|
6
netnr 2022-10-11 19:30:36 +08:00 via Android 1
青椒 就真的离谱 😂
|
7
YuJianrong 2022-10-12 02:18:12 +08:00
看了一眼 css-js.com 上的工具都老掉牙了,还是找找最新的工具链吧。
npm trends 是一个好地方: https://npmtrends.com/babel-minify-vs-terser-vs-uglify-js |
8
Opportunity 2022-10-12 10:13:50 +08:00
UglifyJS2 不支持 es6 啊,const 和 let 它都不认识的。。。
|
9
Austaras 2022-10-12 11:06:42 +08:00
用 terser 啊
|
10
Musong OP 我这个问题是出在 CocosCreator 2.4.8 打包,开始以为是代码错误或不规范。目前打算想办法升级一下 Creator 里的压缩工具。
感谢各位回复。 |