V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Musong
V2EX  ›  JavaScript

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

  •  
  •   Musong · 2022-10-11 15:02:03 +08:00 · 2320 次点击
    这是一个创建于 779 天前的主题,其中的信息可能已经有所发展或是发生改变。
    // 压缩前
    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?

    10 条回复    2022-10-12 12:08:24 +08:00
    angel001ma
        1
    angel001ma  
       2022-10-11 15:06:51 +08:00   ❤️ 1
    https://skalman.github.io/UglifyJS-online/
    这里是正常的,应该是你装的 UglifyJS 的 bug
    liwenkang
        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
    ```
    Musong
        3
    Musong  
    OP
       2022-10-11 15:42:08 +08:00
    @liwenkang #2 两个名字不一样正常,但是不知道出问题的原因是啥
    Musong
        4
    Musong  
    OP
       2022-10-11 15:44:29 +08:00
    @angel001ma #1 好的谢谢 可能版本太老了
    liwenkang
        5
    liwenkang  
       2022-10-11 18:37:17 +08:00
    @Musong 我也没明白是什么原因,感觉像是作用域出现了问题
    netnr
        6
    netnr  
       2022-10-11 19:30:36 +08:00 via Android   ❤️ 1
    青椒 就真的离谱 😂
    YuJianrong
        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
    Opportunity
        8
    Opportunity  
       2022-10-12 10:13:50 +08:00
    UglifyJS2 不支持 es6 啊,const 和 let 它都不认识的。。。
    Austaras
        9
    Austaras  
       2022-10-12 11:06:42 +08:00
    用 terser 啊
    Musong
        10
    Musong  
    OP
       2022-10-12 12:08:24 +08:00
    我这个问题是出在 CocosCreator 2.4.8 打包,开始以为是代码错误或不规范。目前打算想办法升级一下 Creator 里的压缩工具。

    感谢各位回复。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5219 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 03:45 · PVG 11:45 · LAX 19:45 · JFK 22:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.