☰
yoinks历史文件在哪里?history.json存储结构完全解析
2026/10/4 18:00:50 网站建设 项目流程

yoinks历史文件在哪里?history.json存储结构完全解析

【免费下载链接】yoinksyoink any video from your terminal. no shady ads.项目地址: https://gitcode.com/GitHub_Trending/yo/yoinks

yoinks 历史文件(即history.json)是这款终端视频下载工具用来记住你下载过哪些链接的"记忆库"。yoinks 让你粘贴链接即可下载 YouTube、X、TikTok 等 1800+ 平台的视频,而历史功能则让重复下载同一个链接只需按一下↑ 键就能召回。这篇指南带你彻底搞懂:历史文件存在哪、内部结构长什么样、以及那些隐藏的运行规则。

历史文件存储位置:一个固定的隐藏路径

yoinks 的历史记录保存在当前用户主目录下的固定位置:

~/.config/yoinks/history.json

这个路径由 src/lib/history.ts 一行代码写死:

const HISTORY_FILE = path.join(os.homedir(), '.config', 'yoinks', 'history.json')

几个要点:

  • 🔍不是全局共享的:os.homedir()决定了每个系统用户各自拥有一份独立历史,互不干扰
  • 📁目录自动创建:首次写入历史时会自动执行mkdir -p ~/.config/yoinks,你无需手动建目录
  • 🪟全平台一致:Linux / macOS / Windows 下规则相同(Windows 上即%USERPROFILE%\.config\yoinks\history.json)

history.json 内部结构:一个简单的字符串数组

很多人以为历史文件会记录下载时间、文件路径、分辨率等复杂信息,但实际上——它只是一个纯 URL 字符串数组,没有对象、没有时间戳:

[ "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://x.com/user/status/1234567890", "https://www.tiktok.com/@creator/video/987654321" ]

源码 src/lib/history.ts#L22 负责序列化,格式上有两个小细节:

特征说明
缩进JSON.stringify(next, null, 2),统一 2 空格缩进,方便人手读
结尾文件末尾固定追加一个换行符\n,符合 Unix 文本习惯
顺序最新的链接永远在数组第一个(头部插入)

也就是说,整个历史文件可以被理解为:"按时间倒序排列的去重 URL 列表"。

历史存储背后的三条隐藏规则

写入逻辑全部集中在 addToHistory 函数里,拆开看有 3 条规则:

规则一:头部插入 + 自动去重

const next = [url, ...loadHistory().filter(entry => entry !== url)].slice(0, LIMIT)
  • 每次成功下载后,URL 被插到数组最前面
  • 如果该链接已经在历史里,旧的那条会被过滤掉——所以同一链接无论下载多少次,历史里始终只占一行

规则二:硬性上限 50 条

const LIMIT = 50

slice(0, LIMIT)保证数组永远不超过 50 个元素,超出部分(最旧的链接)会被静默丢弃。这意味着 history.json 的体积被天然锁死在很小的范围内,不用担心它无限膨胀。

规则三:坏了也不误事,下载永远优先

这是整个模块最精妙的设计。读取端 loadHistory 和写入端都包在try/catch里:

  • 文件不存在、JSON 损坏、目录无权限→ 读取直接返回空数组,相当于"没有历史",工具照常工作
  • 过滤时会剔除所有非字符串条目(typeof entry === 'string'),手动改坏文件也只会少几条记录,不会崩溃
  • 源码注释写得很直白:"history is a nicety — never let it break a download"(历史只是锦上添花,绝不能让它毁掉下载)

所以如果你不小心把 history.json 改乱了,最坏的结果也只是历史功能"失忆",下次下载成功后文件会被重建。

实战:如何在终端里用上这份历史

下载完成的那一刻,链接就自动写入了历史文件(见 src/app.tsx#L276 中的setHistory(addToHistory(url)))。使用方式非常简单:

  1. 运行yoinks进入首页,光标停在输入框
  2. 按一下↑ 键——底部提示栏出现↑ history时,输入框就会回填最近一次下载的链接
  3. 连续按 ↑ 依次回溯更早的记录;按↵直接重新下载
  4. 回填逻辑由 src/components/text-input.tsx 实现:按 ↑ 之前你正在输入的内容会被暂存,按 ↓ 可以回到暂存状态,不会误删你打了一半的文字

想彻底清空历史?直接删除~/.config/yoinks/history.json即可,下次启动时 yoinks 会自动从零开始记录。

快速总结

问题答案
历史文件在哪?~/.config/yoinks/history.json
内部结构?纯 URL 字符串数组,2 空格缩进,末尾带换行
容量上限?50 条,超出丢弃最旧
重复下载会重复记录吗?不会,自动去重且置顶
文件损坏怎么办?自动降级为空历史,不影响下载
如何召回历史?首页按 ↑ 键

至此,yoinks 的history.json从存储路径到内部结构就完全解析清楚了:一个极简、自修复、永不阻塞下载的小小记忆系统。

【免费下载链接】yoinksyoink any video from your terminal. no shady ads.项目地址: https://gitcode.com/GitHub_Trending/yo/yoinks

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询