You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未Eject的CRA React+TS项目中如何用node --expose-gc运行Jest

CRA+TypeScript项目Jest内存泄漏排查解决方案

问题1:能否在CRA使用的Jest脚本中暴露GC并保留原有配置?

完全可以,无需eject或修改现有配置,利用CRA的test脚本参数传递机制即可实现。通过--分隔npm脚本参数与Jest/Node参数,CRA会自动复用内置的TS/Jest配置:

npm run test -- --expose-gc --runInBand --logHeapUsage --coverage

--后的参数会直接传递给Jest底层的Node进程,既开启了GC暴露,又保留了CRA原有的TS编译、Jest预设配置。

问题2:如何执行node --expose-gc jest并正确解析TS文件?

不要直接调用原生Jest入口(./node_modules/jest/bin/jest.js),而是使用CRA封装的react-scripts测试入口,它已经内置了TS解析逻辑:

node --expose-gc ./node_modules/react-scripts/scripts/test.js --runInBand --logHeapUsage --coverage

这个命令会自动处理TS文件的编译,避免语法错误,同时保留CRA的所有Jest默认配置。

问题3:如何用--inspect-brk排查内存泄漏位置?

通过以下两种方式启动带调试的Jest测试,配合Chrome DevTools分析堆内存:

方式1:通过npm脚本传递参数

npm run test -- --inspect-brk --runInBand

方式2:直接调用node命令

node --inspect-brk ./node_modules/react-scripts/scripts/test.js --runInBand

执行后打开Chrome浏览器,访问chrome://inspect,配置本地调试端口(默认9229)后即可连接调试会话。在Memory面板中多次记录堆快照,对比测试套件运行前后的内存变化,就能定位泄漏点。

注意:必须添加--runInBand,Jest默认并行运行测试,每个测试进程独立,无法统一监控内存;串行执行才能追踪到连续的内存增长情况。

内容的提问来源于stack exchange,提问作者Unapedra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:25:26