我们将有 60k 行代码 TypeScript (Node.js) 的仓库迁移至 ESM,结果单元测试快了 4 倍 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
logto
V2EX    分享创造

我们将有 60k 行代码 TypeScript (Node.js) 的仓库迁移至 ESM,结果单元测试快了 4 倍

  •  1
     < href="Javascript:" Onclick="downVoteTopic(904813);" class="vote">
  •   logto
    logto-io 2022-12-26 19:33:16 +08:00 4054 次点击
    这是一个创建于 1022 天前的主题,其中的信息可能已经有所发展或是发生改变。

    经过三次尝试,我们终于成功地将所有的 Node.js 代码从 CJS 迁移到原生 ESM ,并且单元测试的 CI 大幅减少。

    Comparison

    简单介绍一下之前的状况(你可能在 repo 设置或工具链上有不同的选择,但核心步骤和概念应该是一样的):

    • 包含前端和后端项目的 TypeScript monorepo
    • TypeScript 代码 ~60k 行(包括前端)
    • 在 TypeScript 中使用 import
    • 使用 PNPM 进行 workspace (monorepo) 管理
    • 使用 tsc 编译 Node.js ,使用 Parcel 打包前端项目
    • 使用 Jest + ts-jest 进行单元测试。
    • 使用 module-alias 处理内部 path alias

    顺带一提,我们的项目 Logto 是一个开源的身份 (auth) 解决方案。

    由于文章篇幅过长,我们分成了上下两篇。感兴趣的朋友可以移步 dev.to 查看:

    5 条回复    2022-12-27 13:57:33 +08:00
    Aloento
        1
    Aloento  
       2022-12-27 00:39:53 +08:00 via Android
    我不好说
    pseudo
        2
    pseudo  
       2022-12-27 00:47:25 +08:00 via iPhone
    @Aloento 不好说咱就别说?
    Aloento
        3
    Aloento  
       2022-12-27 00:54:09 +08:00 via Android
    @pseudo 你们可以把之前从 JS 迁移到 TS 的过程也补一下吗(如果还没有相关文章的话),有的话可以分享一下吗,谢谢
    free9fw
        4
    free9fw  
       2022-12-27 08:46:18 +08:00
    也就 import 和 export 方式改一下,代码行数又有什么关联呢
    codehz
        5
    codehz  
       2022-12-27 13:57:33 +08:00   1
    @free9fw 规模上去了才有比较的空间啊,小规模测试的话很难说 esm 有什么优势(
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3026 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 13:37 PVG 21:37 LAX 06:37 JFK 09:37
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86