如何使用npm view按日期时间排序npm包的版本号
npm view返回版本按发布时间排序方案
- jq是处理该场景的最优选择之一:它是原生为命令行JSON流处理设计的工具,无需编写额外脚本、依赖少执行快,和npm命令通过管道拼接的适配性极好。
- 你之前的命令存在三个问题:一是直接用
.[]遍历对象时丢失了版本号(键)和时间(值)的对应关系,二是没有过滤返回结果里created、modified两个非版本的元数据字段,三是没有实现排序逻辑。
具体操作命令
npm返回的时间是标准ISO 8601格式的UTC字符串,字典序和时间先后顺序完全一致,不需要额外转时间戳即可直接排序。
- 按发布时间从早到晚(升序)输出版本+对应时间:
npm view @act/act-qa-task-thycotic time --json | jq 'to_entries | map(select(.key != "created" and .key != "modified")) | sort_by(.value)'
- 按发布时间从新到旧(倒序,最新版本在前)输出版本+对应时间,在排序后加
reverse即可:
npm view @act/act-qa-task-thycotic time --json | jq 'to_entries | map(select(.key != "created" and .key != "modified")) | sort_by(.value) | reverse'
- 如果只需要排序后的纯版本号列表(不带引号、不带时间,方便脚本调用),加
-r参数输出原始字符串,最后提取key字段即可:
# 从旧到新输出纯版本号 npm view @act/act-qa-task-thycotic time --json | jq -r 'to_entries | map(select(.key != "created" and .key != "modified")) | sort_by(.value) | map(.key)[]'
jq逻辑说明
to_entries:将原始的{版本号: 发布时间}对象,转换为[{"key":"版本号","value":"发布时间"}]结构的数组,保留键值对应关系以支持排序map(select(...)):过滤掉非版本的元数据字段sort_by(.value):按发布时间字段做升序排序reverse:将排序后的数组反转,实现最新版本在前的效果
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

