青椒一个 js 作用域和压缩的问题

2022-10-11 15:02:03 +08:00
 Musong
// 压缩前
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?

2074 次点击
所在节点    JavaScript
10 条回复
angel001ma
2022-10-11 15:06:51 +08:00
https://skalman.github.io/UglifyJS-online/
这里是正常的,应该是你装的 UglifyJS 的 bug
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
```
Musong
2022-10-11 15:42:08 +08:00
@liwenkang #2 两个名字不一样正常,但是不知道出问题的原因是啥
Musong
2022-10-11 15:44:29 +08:00
@angel001ma #1 好的谢谢 可能版本太老了
liwenkang
2022-10-11 18:37:17 +08:00
@Musong 我也没明白是什么原因,感觉像是作用域出现了问题
netnr
2022-10-11 19:30:36 +08:00
青椒 就真的离谱 😂
YuJianrong
2022-10-12 02:18:12 +08:00
看了一眼 css-js.com 上的工具都老掉牙了,还是找找最新的工具链吧。
npm trends 是一个好地方:
https://npmtrends.com/babel-minify-vs-terser-vs-uglify-js
Opportunity
2022-10-12 10:13:50 +08:00
UglifyJS2 不支持 es6 啊,const 和 let 它都不认识的。。。
Austaras
2022-10-12 11:06:42 +08:00
用 terser 啊
Musong
2022-10-12 12:08:24 +08:00
我这个问题是出在 CocosCreator 2.4.8 打包,开始以为是代码错误或不规范。目前打算想办法升级一下 Creator 里的压缩工具。

感谢各位回复。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/886087

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX