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

为何aggregate builder中generate_for选项无法正常工作?

问题原因与解决方案

核心原因

你的构建器属于聚合构建器(通过build_extensions中的$package$虚拟资产作为输入),这类构建器的触发逻辑和普通文件构建器完全不同:

  • 普通构建器的触发条件是匹配到generate_for中的文件资产;
  • 聚合构建器的触发条件是$package$这个虚拟资产是否被包含在generate_for的规则里。

当你设置generate_for: ['lib/**.dart']时,这个规则只匹配lib下的dart文件,不匹配$package$虚拟资产,所以构建系统根本不会触发你的聚合构建器,自然不会生成proto文件。而默认的**会匹配所有资产(包括$package$),所以能正常触发。

解决方案

你需要调整generate_for规则包含$package$,同时在构建器代码中限制扫描的文件范围(而不是靠generate_for过滤),具体步骤如下:

  1. 修改项目的build.yaml
    让generate_for包含$package$,确保聚合构建器能被触发:

    targets:
      $default:
        builders:
          package_name|builder_name:
            enabled: true
            generate_for:
              - $package$
    
  2. 调整构建器代码中的扫描范围
    将原来的Glob('**.dart')改成Glob('lib/**.dart'),只扫描lib目录下的dart文件:

    class ProtoBuilder implements Builder {
      // 修改这里的Glob规则
      static final _allFilesInLib = Glob('lib/**.dart');
    
      // 其他代码保持不变...
    }
    

这样调整后,构建器会正常触发,并且只会扫描lib下的dart文件生成聚合内容,符合你的需求。

内容的提问来源于stack exchange,提问作者anonymous-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:33:24