composer不支持按时间点查询版本,需通过packagist api调用并用jq筛选指定日期前最近发布的版本。

Composer 本身不支持按时间点查询版本
Composer 没有内置命令(比如 composer show --at 2023-06-15)能直接查某个包在某天发布的版本。它的 composer show、composer search 和 composer versions 都只面向当前 Packagist 上注册的稳定/非稳定标签,不保留历史时间戳索引。
用 Packagist API 查指定日期前最近的版本
Packagist 公开 API 提供了包的版本列表及其发布时间(time 字段),可以手动筛选。例如查 monolog/monolog 在 2022-03-10 前最后发布的版本:
curl -s "https://packagist.org/packages/monolog/monolog.json" | jq -r '.package.versions | to_entries[] | select(.value.time <p>说明:</p>
-
jq是必需的命令行 JSON 解析工具,没装需先brew install jq或apt install jq - 返回的是类似
2.3.5这样的版本号(已去掉v前缀) - 注意 Packagist 的
time字段是 ISO8601 格式(如"2022-03-09T14:22:31+00:00"),比较时用字符串截取前 10 位即可满足日期级筛选 - 该方式查不到已被删除或标记为
abandoned的版本
用 Git tag + Packagist 源码仓库回溯更可靠
很多主流包会将 tag 同步到 GitHub/GitLab,而 Packagist 页面上每个版本都附带源码链接(如 https://github.com/Seldaek/monolog/tree/2.3.5)。如果 API 数据不准或缺失:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 打开包的 Packagist 页面(如
https://packagist.org/packages/monolog/monolog) - 点进某个版本右侧的
Source链接,跳转到对应 Git 仓库 - 用
git tag --sort=-creatordate | grep -E '^[0-9]+\.' | head -20查本地 clone 后的 tag 时间顺序 - 结合
git show -s --format="%ai %d" <tag></tag>确认每个 tag 的实际打标时间
这个方法绕过 Packagist 缓存和元数据延迟,适合对时间精度要求高的场景(比如审计、合规回溯)。
别指望 composer require 自动选“那天最新的”
composer require monolog/monolog:^2.3 或 @stable 不会按时间选版本,它只按语义化版本规则和当前可用版本集合做约束求解。即使你知道 2022-03-10 当天最新是 2.3.5,也得显式写成 composer require monolog/monolog:2.3.5 才能锁定——否则下次运行可能因依赖解析变化而升级到 2.4.0。
真正要复现某个时间点的完整依赖快照,唯一可靠方式是保存当时的 composer.lock 文件,而不是靠命令临时推导。










