Flutter的 vector_graphics_compiler转换器在GitLab CI运行flutter test时,会导致悄无声息的内存溢出(OOM)和超时
我最近将一个大型Flutter项目从flutter_svg迁移到vector_graphics,以提升渲染性能。
我的项目中大概有数百个,甚至成千上万个.svg文件。我正在使用官方的资源转换器方法,在构建时将这些SVG预编译为二进制的.vec格式。我的pubspec.yaml中包含许多像下面这样的条目:
flutter:
assets:
- path: assets/images/media_player/
transformers:
- package: vector_graphics_compiler
问题:
这在本地机器上效果很棒。第一次运行需要一段时间来编译,但后续运行很快,因为Flutter会缓存已编译的资源。
然而,当我把代码推送到GitLab CI时,流水线在一个新的Docker容器中运行,RAM有所限制。当流水线执行flutter test时,Flutter的资源打包器会在测试开始前尝试同时编译所有这些SVG文件。这会完全压垮CI运行器,导致它无声地内存耗尽(OOM),并无限期地挂起,直到达到1 小时的作业超时。
我的约束条件:
-
我不想在本地预先编译.vec文件并提交到Git。我希望保持代码仓库的整洁,只跟踪源文件.svg。
-
我正在运行标准的单元/小部件测试(没有需要实际渲染SVG的 Golden测试)。
我的问题:
-
有没有办法让flutter test完全忽略或跳过asset transformer这一步?
-
或者,是否有办法限制Flutter的内部资产打包器的并发,让它按顺序处理这些SVG,而不是让CI运行器的内存崩溃?
非常感谢任何关于CI环境的帮助或变通方案!
解决方案
我使用的方案是在测试运行之前,先用 sed 修改 pubspec.yaml 文件,以从transformers部分移除 package: vector_graphics_compiler,这样在测试期间很可能不会渲染SVG文件。
类似的代码(使用AI修改我的代码——我的实现是从一个内部包中编辑的)
sed -i "/- package: vector_graphics_compiler/d" pubspec.yaml
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。