未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
相关产品推荐
相关产品推荐

