首页/新闻资讯/正文详情

Dart SDK 中 analyzer 包发布准备(Prepare a Release)完整指南:多包同步发布工作流与版本策略

发布时间:2026/9/24 16:48:53 来源:云帆数科 栏目:资讯中心
Dart SDK 中 analyzer 包发布准备(Prepare a Release)完整指南:多包同步发布工作流与版本策略
编程语言编译器语言运行时标准库开发工具【免费下载链接】sdkThe Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more.项目地址https://gitcode.com/gh_mirrors/sdk1/sdk点击查看免费下载analyzer包发布并不是一个孤立的动作——在 Dart SDK 仓库中它与_fe_analyzer_shared、analyzer_plugin、analyzer_testing、analysis_server_plugin等多个包存在main 分支 HEAD 级的相互依赖因此必须作为一个整体同步发布。本篇指南基于 pkg/analyzer/doc/implementation/releasing.md 及 pkg/analyzer/.agent/workflows/prepare_analyzer_release.md 定义的发布流程并结合当前仓库中五个包的pubspec.yaml与CHANGELOG.md实际内容完整讲解同步发布的背景原因、各包版本与依赖约束策略以及开启新 minor 版本开启新 major 版本准备正式发布三套可照抄执行的实操工作流。读完本文你将能独立完成 analyzer 生态包的一次完整发布准备并理解每一步背后的版本约束设计意图。为什么 analyzer 及相关包必须同步发布在 Dart SDK 仓库中analyzer包及其相关包共享同一套源码树彼此在main 分支最新提交HEAD上直接相互依赖analyzer依赖_fe_analyzer_shared如 pkg/analyzer/pubspec.yaml 中的_fe_analyzer_shared: ^108.0.0analyzer_plugin、analyzer_testing、analysis_server_plugin都依赖analyzer的私有实现代码analysis_server_plugin还同时依赖analyzer_plugin。仓库中缺乏自动化工具来检测某个包开始使用另一个包中**尚未发布unreleased**的功能既没有工具能提示analyzer之外的其他包用上了analyzer未发布的新 API也没有工具能提示analyzer开始使用_fe_analyzer_shared未发布的新功能。任何一个同时改动多个包的提交都可能悄悄引入对未发布代码的依赖即便人工跟踪这类提交也极易出错。因此发布策略的结论是必须假定在任意时刻一个包可能依赖另一个包中尚未发布的代码。为了安全地保持这些包同步它们应当同时发布released simultaneously这是整个发布策略的出发点。涉及的包及当前仓库状态如下版本号以本仓库实际内容为准包源码目录当前版本仓库 HEAD发布说明_fe_analyzer_sharedpkg/_fe_analyzer_shared108.0.0发布到 pub仅供analyzer使用每次 analyzer 发布都必须同步发布analyzerpkg/analyzer14.5.0-dev核心静态分析库发布到 pubanalyzer_pluginpkg/analyzer_plugin0.14.18-dev面向新旧 analyzer 插件开发者发布到 pubanalyzer_testingpkg/analyzer_testing0.4.3-dev面向新式 analyzer 插件开发者文档标注尚未发布not yet publishedanalysis_server_pluginpkg/analysis_server_plugin0.3.24-dev面向新式 analyzer 插件开发者发布到 pub说明以上版本号为当前仓库快照中的实际值实际执行发布时应以你 checkout 的仓库 HEAD 为准按下方工作流递增。_fe_analyzer_shared与analyzer每次同步发布且必须大版本递增_fe_analyzer_shared包虽然发布到 pub但它的唯一消费者就是analyzer包并不希望被 pub 上其他任何包直接依赖。为此发布策略做了两件事每次发布都视为破坏性发布breaking release_fe_analyzer_shared的每次新发布都进行 major 版本递增例如92.0.0 - 93.0.0。该包只使用 major 版本号不遵循常规的 minor/patch 语义。analyzer每次发布都必须同时发布_fe_analyzer_shared且analyzer依赖的是该新版本的精确或 caret版本例如_fe_analyzer_shared: ^108.0.0。文档指出由于该包只做大版本发布caret 约束如^82.0.0在技术上可行但意义不大实践中通常直接写成匹配新 major 的 caret 约束。此外该包在结构上刻意劝退直接依赖者其 pkg/_fe_analyzer_shared/lib 目录下没有任何文件或子目录除了src目录。如果用户直接import package:_fe_analyzer_shared/src/...这本身就强烈暗示其做法欠妥——因为 pub 上正常可用的包应当通过lib/下非src的公开入口导入。这一结构在当前仓库中可验证pkg/_fe_analyzer_shared/lib/下仅有src/一个目录。依赖analyzer私有代码的三个包随 analyzer 同步发布、精确版本约束analyzer_plugin、analyzer_testing、analysis_server_plugin三个包的代码都依赖analyzer包的私有实现代码private implementation code因此它们必须在analyzer每次发布时同步发布。三者的共同规则版本号管理各包按其自身 API 遵循基础语义化版本semantic versioning即可不强制与analyzer版本号一致当前仓库中它们使用0.x.y-dev形式的独立版本线。依赖约束三者对analyzer的依赖都必须是exact精确版本约束如analyzer: 14.5.0-dev、发布时如analyzer: 14.5.0而不是 caret 区间。其中analysis_server_plugin还有一个额外约束它同时依赖analyzer_plugin包且对该依赖同样必须使用exact 版本约束。以下约束在当前仓库的pubspec.yaml中均可直接验证pkg/analyzer_plugin/pubspec.yaml 中analyzer: 14.5.0-dev精确约束pkg/analyzer_testing/pubspec.yaml 中analyzer: 14.5.0-dev精确约束pkg/analysis_server_plugin/pubspec.yaml 中analyzer: 14.5.0-dev与analyzer_plugin: 0.14.18-dev均为精确约束。之所以必须用精确约束是因为这些包依赖的是analyzer的私有实现细节只有与发布时刻完全一致的analyzer版本才能保证私有 API 形状吻合放开为版本区间会在后续analyzer升级时静默引入不兼容风险。工作流一开启一个新的 minor 版本当analyzer需要从当前开发版本开启下一个 minor 版本例如10.0.0→10.1.0-dev时按以下步骤操作对应 releasing.md 中 Workflow: Start a new minor version 一节更新analyzer编辑 pkg/analyzer/pubspec.yaml将version设为下一个 minor 的dev版本例如10.0.0→10.1.0-dev更新 pkg/analyzer/CHANGELOG.md为新版本添加一个 section以Internal changes only作为占位内容。当前仓库的 pkg/analyzer/CHANGELOG.md 中即可看到## 14.5.0-dev标题下以* Internal changes only为占位符的写法。更新analyzer_plugin编辑 pkg/analyzer_plugin/pubspec.yaml将version设为下一个 patch 的dev版本将analyzer依赖改为步骤 1 得到的精确版本如analyzer: 10.1.0-dev更新 pkg/analyzer_plugin/CHANGELOG.md 为新版本添加 section。更新analyzer_testing编辑 pkg/analyzer_testing/pubspec.yaml将version设为下一个 patch 的dev版本将analyzer依赖改为步骤 1 得到的精确版本更新 pkg/analyzer_testing/CHANGELOG.md 为新版本添加 section。更新analysis_server_plugin编辑 pkg/analysis_server_plugin/pubspec.yaml将version设为下一个 patch 的dev版本将analyzer依赖改为步骤 1 得到的精确版本将analyzer_plugin依赖改为步骤 2 得到的精确版本更新 pkg/analysis_server_plugin/CHANGELOG.md 为新版本添加 section。准备提交信息commit message参考仓库历史中类似开启新 minor 版本的提交作为模板。工作流二开启一个新的 major 版本当需要开启新的 major 版本例如9.0.0→10.0.0-dev时流程与 minor 版本类似关键差异在于依赖约束的放宽方式——次要包允许依赖新的 major 版本区间而非精确版本更新analyzer编辑 pkg/analyzer/pubspec.yaml递增 major 版本例如9.0.0→10.0.0-dev更新 pkg/analyzer/CHANGELOG.md 为新版本添加 section以Internal changes only作为占位内容。更新analyzer_plugin编辑 pkg/analyzer_plugin/pubspec.yaml将version设为下一个 patch 的dev版本将analyzer依赖改为允许新 major 版本的约束例如analyzer: ^10.0.0-0即 caret 加预发布版本区间允许匹配10.0.0-0及之后的10.x.y更新 pkg/analyzer_plugin/CHANGELOG.md。更新analyzer_testing编辑 pkg/analyzer_testing/pubspec.yaml将version设为下一个 patch 的dev版本将analyzer依赖改为允许新 major 版本的约束例如analyzer: ^10.0.0-0更新 pkg/analyzer_testing/CHANGELOG.md。更新analysis_server_plugin编辑 pkg/analysis_server_plugin/pubspec.yaml将version设为下一个 patch 的dev版本将analyzer依赖改为允许新 major 版本的约束例如analyzer: ^10.0.0-0将analyzer_plugin依赖改为步骤 2 得到的精确版本——注意即使是在 major 版本开启流程中analysis_server_plugin对analyzer_plugin依然保持精确约束更新 pkg/analysis_server_plugin/CHANGELOG.md。准备提交信息参考仓库历史中类似开启新 major 版本的提交作为模板。工作流三准备正式发布Prepare a Release这是 prepare_analyzer_release.md 指向的核心工作流用于将处于-dev状态的各包正式定版、准备发布到 pub。共六个步骤更新_fe_analyzer_shared编辑 pkg/_fe_analyzer_shared/pubspec.yaml递增 major 版本例如92.0.0→93.0.0。这是唯一同时推进的包因为它每次发布都按破坏性发布处理。更新analyzer编辑 pkg/analyzer/pubspec.yaml将version设为发布版本去掉-dev后缀或按需递增例如14.5.0-dev→14.5.0将_fe_analyzer_shared依赖更新为步骤 1 得到的新版本例如_fe_analyzer_shared: ^93.0.0更新 pkg/analyzer/CHANGELOG.md为发布条目release entry设置正式版本号。更新analyzer_plugin编辑 pkg/analyzer_plugin/pubspec.yaml将version设为发布版本将analyzer依赖改为步骤 2 得到的精确版本例如analyzer: 14.5.0更新 pkg/analyzer_plugin/CHANGELOG.md 为发布条目设置版本号。更新analyzer_testing编辑 pkg/analyzer_testing/pubspec.yaml将version设为发布版本将analyzer依赖改为步骤 2 得到的精确版本更新 pkg/analyzer_testing/CHANGELOG.md 为发布条目设置版本号。更新analysis_server_plugin编辑 pkg/analysis_server_plugin/pubspec.yaml将version设为发布版本将analyzer依赖改为步骤 2 得到的精确版本将analyzer_plugin依赖改为步骤 3 得到的精确版本更新 pkg/analysis_server_plugin/CHANGELOG.md 为发布条目设置版本号。准备提交信息参考仓库历史中类似prepare release的提交作为模板。一个直观的发布版本组合示例结合上述规则与当前仓库状态一次完整的正式发布会形成如下依赖链示例数值仅用于说明关系_fe_analyzer_shared:108.0.0→109.0.0major 递增analyzer:14.5.0-dev→14.5.0依赖_fe_analyzer_shared: ^109.0.0analyzer_plugin:0.14.18-dev→0.14.18依赖analyzer: 14.5.0精确analyzer_testing:0.4.3-dev→0.4.3依赖analyzer: 14.5.0精确analysis_server_plugin:0.3.24-dev→0.3.24依赖analyzer: 14.5.0与analyzer_plugin: 0.14.18均为精确。发布策略背后的设计要点速览为什么_fe_analyzer_shared每次都是 breaking release它的消费方只有analyzer两者同仓开发、同步发布因此不需要为它维护向后兼容的 minor 语义统一 major 递增反而让依赖关系更简单、更可预测。为什么次要包用精确约束而不用 caretanalyzer_plugin、analyzer_testing、analysis_server_plugin依赖analyzer的私有实现任何analyzer内部重构都可能破坏它们精确版本把何时需要再次同步发布变成了显式、强制的事件。为什么开启新版本时反而允许 caret如^10.0.0-0在新 major 的开发期各包需要跟随analyzer的-dev迭代频繁联动caret 加预发布区间能减少开发期的摩擦而正式发布时则回落到精确约束保证 pub 上的发布产物彼此严格匹配。CHANGELOG 的占位惯例新开发版本以Internal changes only占位当前仓库 pkg/analyzer/CHANGELOG.md 中## 14.5.0-dev等条目均可见正式发布时再替换为真实的变更条目与正式版本号。配套工作流文件除 prepare release 之外pkg/analyzer/.agent/workflows/目录下还提供了两个配套的自动化工作流文件均以 releasing.md 为操作手册start_new_analyzer_minor_version.md指示读取 releasing.md 并执行 Workflow: Start a new minor versionstart_new_analyzer_major_version.md指示读取 releasing.md 并执行 Workflow: Start a new major version。三者开启 minor、开启 major、准备发布共同构成 analyzer 生态包完整的版本生命周期管理闭环开发期开启新版本线 → 迭代期维护-dev版本 → 发布期统一定版同步发布。执行任一工作流时请始终以仓库当前 HEAD 上各包的实际版本与依赖约束为准按序修改五个包的pubspec.yaml与CHANGELOG.md并保持依赖约束类型精确 / caret与工作流要求一致。赞分享编程语言编译器语言运行时标准库开发工具【免费下载链接】sdkThe Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more.项目地址https://gitcode.com/gh_mirrors/sdk1/sdk点击查看免费下载相关推荐Dart SDK 外部包维护实践指南版本管理、发布流程与 Monorepo 同步Dart SDK 外部包维护实践指南版本管理、发布流程与 Monorepo 同步 本指南以 Dart SDK 仓库的 docs/External Packag编程语言编译器语言运行时标准库开发工具Tantivy 版本发布流程指南基于 cargo-release 的工作区Workspace多包发布实战Tantivy 版本发布流程指南基于 cargo release 的工作区Workspace多包发布实战 Tantivy 是一个用 Rust 编写的全文搜全文检索后端Douyin Downloader 教程从零完成抖音主页作品批量下载免费开源Douyin Downloader 教程从零完成抖音主页作品批量下载免费开源 Douyin Downloader 是一款免费开源的抖音批量下载工具支持无网页爬虫CLI上一篇Sunshine游戏串流终极指南5步打造你的免费私人云游戏平台下一篇网盘下载速度太慢这个免费开源工具让你一键获取直链告别龟速下载创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Kornia LoFTR 实战指南:免检测器的 Transformer 特征匹配与几何估计
Kornia LoFTR 实战指南:免检测器的 Transformer 特征匹配与几何估计

计算机视觉人工智能深度学习图像处理 【免费下载链接】kornia 🐍 Geometric Computer Vision Library for Spatial AI 项目地址: https://gitcode.com/gh_mirrors/ko/kornia 点击查看 免费下载 LoFTR 是 Kornia 提供的一套免检测器(detector… · 2026/9/24 16:48:53

CAXA-3D绘图教程
CAXA-3D绘图教程

添加孔类长方体选择”孔类孔类长方体”,按F10 键&#xff0c;启动三维球,点击<空格键>使三维球呈白色&#xff0c;让三维球定位在孔类长方体低边设置(到面与点间)位置到实体面板上。底座直口绘制构造辅助元素点击确认全选两条线&#xff0c;取消作为构造辅助元素完成后&a… · 2026/9/24 16:48:53

分享:高校考试管理系统:理实一体化数智化考评平台,让数智化人才“真考真练”
分享:高校考试管理系统:理实一体化数智化考评平台,让数智化人才“真考真练”

当大数据、人工智能、计算机等专业教学加速走向工程现场&#xff0c;传统考试却仍停留在“纸笔理论客观题”的阶段&#xff1a;学生会不会写代码、能不能部署集群、能否解决真实工程问题&#xff0c;一张卷面很难考出来&#xff1b;教师出题、配环境、改主观题&#xff0c;考务… · 2026/9/24 16:48:33

BA | 一周速学业务与系统框架
BA | 一周速学业务与系统框架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 17:28:23

skywallking 告警配置案例
skywallking 告警配置案例

告警配置# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to yo… · 2026/9/24 17:28:23

k8s下,Harbor 私有镜像仓库部署
k8s下,Harbor 私有镜像仓库部署

环境信息表格服务器IP角色node‑0110.10.6.27k8s 节点 HAProxyKeepalivednode‑0210.10.6.28k8s 节点 HAProxyKeepalivednode‑0310.10.6.29k8s 节点 HAProxyKeepalivedVIP10.10.6.100Keepalived 虚拟 IP&#xff0c;前端负载均衡入口集群版本&#xff1a;K8s v1.28.15&… · 2026/9/24 17:28:23

【股票交易】第 56 章 基本面与技术面的结合
【股票交易】第 56 章 基本面与技术面的结合

回到目录 文章目录 56.1 把公司质量、价值与交易条件分别判断 一、先明确每类分析负责什么 二、两类分析都需要允许修正 三、价值判断与价格兑现是两个问题 56.2 从宏观与行业,走到公司盈利和股票价格 一、把宏观判断落实到公司变量 二、盈利改善与股价上涨之间,还有估值这一… · 2026/9/24 17:28:17

零基础学ESP32:舵机控制——让设备精准转动到指定角度!
零基础学ESP32:舵机控制——让设备精准转动到指定角度!

前面我们学了控制LED亮灭、控制继电器开关、让蜂鸣器唱歌——但这些都只是"开"和"关"两种状态。今天要学一个能精准控制角度的设备&#xff1a;舵机。 航模飞机的机翼控制、小车车轮的转向、家用电器的开关、机器人关节的转动……这些需要"转到某个精… · 2026/9/24 17:28:17

智能时代网安护航:端点安全一体化如何筑牢政企终端安全底座
智能时代网安护航:端点安全一体化如何筑牢政企终端安全底座

2026年国家网络安全宣传周以“网络安全为人民 网络安全靠人民——智能时代 网安护航”为核心主题&#xff0c;聚焦智能化时代网络安全防护体系建设&#xff0c;强调全民、全行业、全场景的网络安全防护理念。随着人工智能、数字化办公、云终端、移动办公的全面普及&#xff0c;… · 2026/9/24 17:28:17

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介&#xff1a;这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源&#xff0c;围绕YOLOv8实现渔船作业监控系统&#xff0c;可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件&#xff0c;约24.21MB&#xff0c;以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介&#xff1a;面向时间序列数据建模的一维卷积神经网络完整实现&#xff0c;适合深度学习入门者及需要快速验证时序模型的研究者&#xff0c;能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小&#xff0c;只有3KB&#xff0c;内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L&#xff0c;而是舌尖上的L最近在几个方言群和语音教学社群里&#xff0c;反复看到有人发一句&#xff1a;“也说字母L&#xff1a;柔软的长舌”。初看以为是英语发音课笔记&#xff0c;点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码