关于 dart-migration-versioning
面向 Dart 开发者的语言版本管理与迁移参考,涵盖 SDK 约束、单文件版本覆盖、破坏性变更和验证流程。
主要功能
- 01检查 SDK 约束
- 02设置包级语言版本
- 03按库覆盖语言版本
- 04查阅破坏性变更
- 05迁移与验证清单
适用场景
- 01将包升级到较新的 Dart 版本
- 02推迟迁移旧代码文件
- 03升级 SDK 前检查兼容性
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dart-lang/ skills --skill dart-migration-versioning安装后在 Claude Code 中输入/dart-migration-versioning确认已加载。
详细介绍
管理 Dart 语言版本
目录
核心指南
- 在开始任何迁移或重构之前,先检查
pubspec.yaml中的当前语言版本要求。 - 执行主要依赖项或 SDK 升级之前,先查阅重大变更日志。
- 渐进式迁移期间,使用
@dart = <version>将特定文件固定到较旧版本(例如,将大型项目迁移到新的语言功能,如健全的空安全)。 - 了解版本推导规则:软件包的默认语言版本严格由
pubspec.yaml中 SDK 约束的下限决定。补丁版本不会引入新的语言功能。
配置与覆盖
全局软件包版本控制
修改 pubspec.yaml 中的 environment.sdk 约束,为整个软件包设置默认语言版本。
单个库的版本选择
使用特定注释语法,为单个文件覆盖软件包级语言版本。
- 将
@dart字符串放在//注释中(不要使用///或/*)。 - 确保该注释出现在文件中的任何 Dart 代码之前。
- 升级软件包其余部分时,使用此机制保持旧代码的兼容性。
工作流
任务进度:渐进式语言版本迁移
将项目升级到包含重大变更的 Dart 新主版本或次版本时,使用此工作流。
- 分析当前状态:在当前版本上运行
dart analyze,确保基线干净。 - 检查约束:检查
pubspec.yaml,确定当前 SDK 约束的下限。 - 查看重大变更:查阅目标版本的重大变更参考。
- 更新 SDK 约束:将
pubspec.yaml中environment.sdk的下限修改为目标版本。 - 运行依赖解析:执行
dart pub get。 - 识别问题:运行
dart analyze。 - 应用有条件的修复逻辑:
- 如果文件较小或易于重构:立即修复重大变更带来的问题,以符合新语言版本的要求。
- 如果文件较复杂或属于大型旧版模块的一部分:在文件顶部插入
// @dart = <previous_version>,推迟迁移。
- 运行验证程序:执行
dart test和dart analyze-> 查看错误 -> 修复剩余问题。
示例
设置软件包语言版本
# pubspec.yaml
name: my_package
environment:
# This sets the default language version to Dart 3.3
sdk: '>=3.3.0 <4.0.0'
应用单个库的覆盖设置
// @dart = 2.19
// The above comment pins this specific file to Dart 2.19,
// even if the pubspec.yaml specifies Dart 3.0+.
import 'dart:math';
void legacyFunction() {
// Legacy code implementation
}
重大变更参考
展开查看 Dart 关键重大变更(版本 2.12 - 3.11)
Dart 3.11.0
- Wasm 编译:导入
dart:js_util或package:js的代码会导致编译错误。迁移到dart:js_interop。 - 分析器:已弃用
avoid_null_checks_in_equality_operators、prefer_final_parameters和use_if_null_to_convert_nulls_to_boolslint 规则。
Dart 3.10.0
- SDK:
dartCLI 与 Dart VM 现已成为独立的可执行文件(dartvm)。已移除对 IA32 平台的支持。 - Wasm 编译:
dartify会将 JSPromise对象转换为 DartFuture对象,而不是JSValue。
Dart 3.7.0
- 语言:名为
_的局部变量和参数不再绑定,无法访问。 - 库:旧版 Web 库(
dart:html、dart:js等)已正式弃用。迁移到package:web和dart:js_interop。
Dart 3.5.0
- 运行时:Dart VM 不再支持不健全的空安全。已移除
--no-sound-null-safetyCLI 选项。
Dart 2.12.0
- 语言:默认启用健全的空安全。
相关技能
dart-web-developmentdart-static-analysis
评论
支持 Markdown