关于 dart-package-management
介绍 Dart 包的目录组织,以及 pubspec 配置、依赖和工作区管理,适合维护单个包或 monorepo 的开发者。指南附有工作流程和配置示例。
主要功能
- 01标准包目录结构
- 02pubspec.yaml 配置指南
- 03Monorepo 工作区设置
- 04获取和升级依赖
- 05包管理检查清单
适用场景
- 01规划新的 Dart 包结构
- 02将仓库改为工作区
- 03管理多个包的依赖
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dart-lang/ skills --skill dart-package-management安装后在 Claude Code 中输入/dart-package-management确认已加载。
详细介绍
管理 Dart 包
目录
包布局约定
使用标准化目录组织 Dart 包,以确保工具兼容性并明确 API 边界。
lib/:在此处放置公共库和资源。仅导出公共 API。lib/src/:在此处放置内部实现文件。切勿从其他包的lib/src/导入内容。在自己的包中从lib/src/导入到lib/时,请使用相对导入。bin/:在此处放置公共命令行可执行文件。tool/:在此处放置内部脚本和工具(例如代码生成、文档脚本)。test/:在此处放置单元测试,文件名以_test.dart结尾。integration_test/:在此处放置耗时较长的集成级测试。example/:在此处放置展示包用法的独立示例程序。使用package:导入引用父包。web/:在此处放置 Web 专用入口点(main.dart)和资源(index.html、CSS)。hook/:在此处放置 SDK 构建钩子(例如build.dart)。
Pubspec 配置
确保每个包的根目录都有有效的 pubspec.yaml。
- 版本约束:使用插入符号语法(
^)指定依赖项版本约束(例如^3.2.0),以允许不含破坏性变更的更新。 - SDK 约束:始终定义
environment,并设置 SDK 的最低版本约束。 - 公共资源:明确列出包所需的所有公共资源(图片、字体)。
- 可执行文件:在
executables字段下,将bin/中的脚本映射到命令名称。 - 元数据:已发布的包应包含
name、version、description、repository和issue_tracker。 - 主题:使用
topics字段为已发布的包分类(最多 5 个主题,仅限小写字母数字字符和连字符)。 - 误报密钥:使用
false_secrets字段和 gitignore 模式,避免 pub 在发布前检测泄漏时产生误报。
Monorepo 工作区
在 monorepo 中实现工作区,以便本地包共享依赖项,减少内存用量并确保版本一致。
- 根 Pubspec:在仓库根目录定义工作区。设置
publish_to: none,要求 SDK 版本为^3.6.0或更高,并使用workspace字段和 glob 模式(例如packages/*)。 - 子 Pubspec:在每个工作区包中,要求 SDK 版本为
^3.6.0或更高,并设置resolution: workspace。 - 相互依赖:像依赖普通包一样依赖其他工作区包。Pub 会自动解析到本地工作区版本。
- 覆盖项:将
dependency_overrides放在根目录的pubspec.yaml中,以便在整个工作区全局应用覆盖项。
工作流
设置 Monorepo 工作区
使用此检查清单,将标准仓库转换为 Dart 工作区。
- 创建根目录的
pubspec.yaml。 - 在根 pubspec 中设置
publish_to: none和environment: sdk: ^3.6.0。 - 在根 pubspec 中使用 glob 模式添加
workspace:字段(例如- packages/*)。 - 更新所有子目录中的
pubspec.yaml文件,添加environment: sdk: ^3.6.0(或更高版本)。 - 在所有子目录的
pubspec.yaml文件中添加resolution: workspace。 - 在仓库根目录运行
dart pub get。 - 反馈循环:运行验证器 -> 检查错误 -> 修复。确保子目录中没有多余的
pubspec.lock或.dart_tool/package_config.json文件。如果解析失败,请统一各子包中冲突的依赖项版本。
管理依赖项
- 运行
dart pub get获取依赖项并生成package_config.json。 - 运行
dart pub upgrade,将依赖项更新到最新兼容版本。 - 仅为应用程序包提交
pubspec.lock。库包不应提交此文件。
示例
Standard Library Pubspec
name: enchilada
description: A comprehensive toolkit for newt transmogrification.
version: 1.2.3
repository: https://github.com/example/enchilada
issue_tracker: https://github.com/example/enchilada/issues
environment:
sdk: ^3.6.0
dependencies:
path: ^1.8.0
transmogrify: ^0.4.0
dev_dependencies:
test: ^2.0.0
lints: ^3.0.0
executables:
enchilada: main
topics:
- transmogrification
- utilities
Workspace Root Pubspec
name: my_monorepo
publish_to: none
environment:
sdk: ^3.6.0
workspace:
- packages/*
# Apply overrides globally across all workspace packages
dependency_overrides:
transmogrify: ^0.5.0-dev
Workspace Child Pubspec
name: client_package
description: The client application for the monorepo.
version: 1.0.0
publish_to: none
environment:
sdk: ^3.6.0
resolution: workspace
dependencies:
shared_package: ^1.0.0 # Resolves locally within the workspace
http: ^1.1.0
评论
支持 Markdown