V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
autoxbc
V2EX  ›  前端开发

有没有用 swc 替换 Babel 的朋友?

  •  
  •   autoxbc · 2019-10-21 00:06:58 +08:00 · 3288 次点击
    这是一个创建于 1647 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Babel 编译有点慢,查了下有人用 Rust 重写了,也就是 swc,性能好 16 倍
    配置完速度是飞快,原来 6s 现在一闪完成

    问题来了,target 设为 es5,结果 async 不是转为 Promise 而是 generator
    查了下官网,就是这样设计的
    https://github.com/swc-project/swc

    可是 es5 里哪有 generator,这样等于不能用,白瞎了挺快的速度,怎么办?
    4 条回复    2019-10-22 05:01:04 +08:00
    Austaras
        1
    Austaras  
       2019-10-21 05:18:19 +08:00
    swc 非常不成熟,不要用

    这个行为和 babel 是一致的,需要载入 generator polyfill,一般使用 https://www.npmjs.com/package/regenerator-runtime
    autoxbc
        2
    autoxbc  
    OP
       2019-10-21 15:51:56 +08:00
    @Austaras #1 感谢解答
    我这里已经引入 babel-polyfill,也就间接包含了 regenerator-runtime。问题是,Babel 会把 generator 编译为 regeneratorRuntime 的函数调用;而 swc 遇到 generator 就把形如 function * () {} 的代码留在了转码文件中

    那么,怎么能让 swc 编译 generator 到 regeneratorRuntime 的函数调用呢?
    autoxbc
        3
    autoxbc  
    OP
       2019-10-21 17:42:42 +08:00
    @autoxbc #2 看起来 regenerator-transform 可以转码,不过 regenerator 和 Babel 一样慢,也就没有意义了

    另:swc 确实不成熟,形如

    if(1){
    const arg = 1 ;
    }
    const arg = 2 ;

    居然转成

    if (1) {
    var arg = 1;
    }
    var arg = 2;

    好明显的 bug,放弃了
    Austaras
        4
    Austaras  
       2019-10-22 05:01:04 +08:00
    去提 issue 吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1746 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:33 · PVG 00:33 · LAX 09:33 · JFK 12:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.