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

如何逐步将代码库迁移至strict mode(严格模式)

逐步迁移到Dart Strict Mode的方案

核心思路:分阶段管控代码规则

不用单独维护两个analyzer配置文件,Dart的analyzer本身支持基于文件路径的规则覆盖,可以在同一个analysis_options.yaml里实现“旧代码宽松、新/修改代码严格”的效果。

具体步骤

1. 基础配置:全局启用宽松规则

先在根目录的analysis_options.yaml里设置基础的、旧代码能兼容的规则,避免一开始就爆大量错误:

analyzer:
  strong-mode:
    implicit-casts: true  # 先保留隐式转换,后续逐步关闭
    implicit-dynamic: true
  errors:
    # 暂时忽略旧代码里常见的严重错误,后续逐个清理
    unused_local_variable: ignore
    unused_import: ignore

linter:
  rules:
    # 先启用一些低侵入性的基础规则
    - avoid_empty_else
    - prefer_const_constructors

2. 新增严格规则组,仅应用于指定文件

在同一个配置体系内实现规则局部覆盖:

  • 先创建analysis_options_strict.yaml存放严格规则:
analyzer:
  strong-mode:
    implicit-casts: false
    implicit-dynamic: false
  errors:
    unused_local_variable: error
    unused_import: error

linter:
  rules:
    # 启用所有你需要的严格规则
    - prefer_final_fields
    - unnecessary_null_checks
    - avoid_print
    # ... 补充其他严格规则
  • 回到根目录的analysis_options.yaml,末尾添加规则覆盖逻辑:
include: analysis_options_strict.yaml
analyzer:
  exclude:
    # 列出所有旧代码目录/文件,这些文件不应用严格规则
    - lib/legacy/**
    - lib/old_feature/**
    - lib/xxx_old_page.dart
  # 也可以反向指定仅对新代码目录应用严格规则
  # include:
  #   - lib/new_feature/**
  #   - lib/src/new_module/**

这样,除了exclude中的旧代码,新写的、修改后的文件都会自动应用严格规则。

3. 渐进式清理旧代码

  • 每次修改旧代码文件时,临时移除该文件在exclude中的条目,修复当前文件内的严格规则错误后,永久从exclude中删除,纳入严格规则管控。
  • 定期批量清理:比如每周选定一个旧模块,集中修复错误后移出exclude。

4. 精准管控修改文件(可选)

如果想只对git中修改过的文件应用严格规则,可以用脚本生成动态配置:

# 获取当前分支相对于主分支修改的dart文件列表
git diff --name-only main -- lib | grep '\.dart$' > modified_files.txt

通过脚本将未修改的旧文件自动加入exclude列表,适合临时校验场景,长期建议还是按目录/模块划分管控。

注意事项

  • 不要维护独立的双配置文件,用include+exclude的方式更简洁,避免规则不一致。
  • CI流程中可单独对新/修改文件运行严格规则检查,旧代码暂时放行,不阻塞流水线。
  • 团队约定:新代码必须符合严格规则,修改旧代码时至少修复当前修改部分的规则错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:10:28