Flutter vector_graphics_compiler转换器在GitLab CI执行flutter test时静默OOM/超时
针对Flutter CI中vector_graphics资源编译OOM问题的解决方案
1. 让flutter test完全跳过资源转换器步骤
由于你的测试无需实际渲染SVG,可在CI环境中临时修改pubspec.yaml,移除vector_graphics的转换器配置,彻底跳过预编译流程:
CI脚本实现方式
在GitLab CI的作业脚本中添加以下命令:
# 注释掉pubspec里的vector_graphics转换器配置 sed -i '/transformers:/,/package: vector_graphics_compiler/s/^/#/' pubspec.yaml # 执行测试 flutter test
该sed命令会精准注释掉指定的transformers代码块,Flutter资源打包器将不再触发SVG转vec的编译流程,从根源避免内存占用问题。若你的pubspec配置格式有差异,可调整sed的匹配规则确保只处理目标配置块。
2. 限制资源编译的并发数(保留转换器场景)
若必须保留资源转换器,可通过环境变量限制编译的并发线程数,降低内存峰值:
CI环境变量配置
在CI作业中先设置环境变量,再执行测试:
# 设置单线程编译SVG export VECTOR_GRAPHICS_COMPILER_CONCURRENCY=1 # 执行测试 flutter test
VECTOR_GRAPHICS_COMPILER_CONCURRENCY是vector_graphics官方支持的环境变量,设置为1即可让转换器顺序处理每个SVG文件,大幅降低内存占用,避免OOM崩溃。
额外CI优化建议
- 启用GitLab CI缓存,缓存
.dart_tool/、build/目录,后续作业可复用已编译的vec资源,减少重复编译的耗时与内存消耗; - 若runner内存仍紧张,可尝试添加
--dart-define=FLUTTER_BUILD_MODE=debug参数执行测试,进一步降低内存占用。
内容的提问来源于stack exchange,提问作者Sebb
相关产品推荐
相关产品推荐

