资讯详情

资讯详情

Tinycast 扩展安装完全指南:注册表搜索、Raycast 导入、本地目录与源码构建全流程

桌面应用【免费下载链接】tinycastTinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history.项目地址https://gitcode.com/GitHub_Trending/ti/tinycast点击查看免费下载导读Tinycast 是一款完全原生的 macOS 启动器launcher同时内置热键与剪贴板历史功能并原生运行 Raycast 扩展。本文围绕Settings → Extensions → Install这一入口系统讲解 Tinycast 安装扩展的三种途径注册表搜索、从 Raycast 导入、从本地文件夹添加深入剖析其背后的双注册表模型预编译 Store 与 GitHub 源码仓库、包管理器自动探测与 PATH 搜索机制以及存储与卸载的完整生命周期帮助你在不依赖 Node 工具链的情况下完成绝大多数扩展的安装并理解源码安装时的构建细节。三种安装途径概览在Settings → Extensions → Install面板中Tinycast 提供了三种互补的安装方式它们的核心差异在于扩展以什么形态进入你的 Mac途径形态是否需要工具链Search Registries搜索注册表从已启用的注册表在线获取安装即用取决于所选注册表Store 不需要GitHub 源码需要Import from Raycast从 Raycast 导入直接复制本机 Raycast 已构建好的扩展完全不需要Add from folder从文件夹添加从含 manifest 与构建产物的本地文件夹安装不需要但要求文件夹内是已构建产物其中从 Raycast 导入是最省心的一条路径不构建任何东西不需要 Node、不需要包管理器、不需要网络因为扩展早已构建完成只需原样搬移。这一点在源码中有直接印证导入逻辑Tinycast/Features/Extensions/Service/ExtensionCatalog.swift中的importableFromRaycast()只扫描扩展目录中的package.jsonmanifest 与已存在的command.js构建产物并对不满足条件的半安装或纯源码目录直接跳过。搜索注册表Search Registries搜索注册表会同时查询每一个已启用的注册表并从任意命中者中安装。这是日常使用中最常见的安装方式。搜索请求在客户端侧是并行发起的ExtensionStoreClient.search(_:in:)Tinycast/Features/Extensions/Service/ExtensionStoreClient.swift使用withTaskGroup同时向所有启用的注册表发起查询但结果按注册表配置顺序而非完成顺序返回保证列表不会在多次搜索之间重新洗牌单个注册表失败也不会拖垮其他注册表的结果。值得注意的细节GitHub 注册表本身没有搜索能力因此 Tinycast 会在本地对仓库内的扩展文件夹名做模糊匹配FuzzyMatch排名只读取排名最高的前 12 个候选githubCandidateLimit逐一拉取package.json摘要避免浪费请求配额。Store 则走其官网搜索所使用的端点。从 Raycast 导入Import from Raycast该功能把你在这台 Mac上已经通过 Raycast 装好的扩展直接复制进来无需任何构建与联网。Tinycast 会同时检查~/.config/raycast与~/.config/raycast-x两个目录ExtensionCatalog.raycastExtensionRoots()明确枚举了这两个路径其中raycast-x对应 Beta v2 通道当一个扩展在两个目录中都存在时只提供一次导入列表按 manifest 的name去重较早的根目录优先。面板提供Import All全部导入按钮批量导入时界面会实时显示(done, total)进度见 Tinycast/Features/Extensions/Settings/ExtensionsSettingsView.swift 中的importProgress状态与importAll(_:)方法避免一次导入几十个扩展时静默无反馈。每次打开该面板都会重新检查一遍并提示你Raycast 中有、但 Tinycast 还没有的扩展pending列表在task启动时通过raycastImportCandidates()刷新例如显示N not here yet — …的摘要。导入只认已构建的扩展Raycast 以 UUID 作为目录键因此 Tinycast 只能靠 manifest 判断目录里装的是什么只有当目录内存在对应command.js构建产物时才视为可导入。从文件夹添加Add from folder第三种方式面向你自己构建好的项目指向任意一个包含 manifestpackage.json和已构建命令文件的文件夹即可安装。复制动作非常克制见 Tinycast/Features/Extensions/Service/ExtensionCatalog.swift 中install(from:)的实现只复制package.json、所有已构建的command.js文件以及assets/目录绝不复制node_modules绝不复制.js.map源映射——它们既占空间又暴露源码安装前会校验 manifest 是否存在否则报notAnExtension、扩展是否支持 macOS否则报wrongPlatform、是否存在至少一个已构建命令否则报noBuiltCommands提示Tinycast 只安装预构建扩展请在扩展目录先运行ray build或从已安装的 Raycast 导入。一个值得留意的细节GitHub 源码下载会丢失文件的可执行位mode bits因此安装与每次扫描时Tinycast 会按文件内容识别可执行负载shebang#!或 Mach-O/ELF 魔数并恢复执行权限restoreExecutablePermissions保证扩展内的辅助可执行脚本可以正常运行。注册表RegistriesTinycast 出厂自带两个注册表你可以自由地添加自己的注册表。两者本质上是两种完全不同的供货渠道Raycast StoreGitHub 仓库提供给你一个已构建好的扩展源代码你需要准备什么都不需要Node 与一个包管理器Store 正是大多数人完全不需要工具链的原因——它直接把已经构建好的产物交给你。从源码看Tinycast/Features/Extensions/Model/ExtensionRegistry.swift两个内置注册表的定位是Raycast Storekind .raycastStore默认开启通过 Raycast 官网搜索所用的端点提供预编译扩展它不是一个官方 API因此 Store 端点若变化GitHub 注册表就是兜底方案官方 GitHub 注册表raycast/extensionskind .github默认关闭因为它提供的是源码、安装时需要构建工具链。GitHub 注册表的形态与添加方式一个 GitHub 注册表就是任何每个扩展一个文件夹布局的仓库例如raycast/extensions。添加时输入owner/repo或直接粘贴仓库中某个扩展文件夹的链接。解析逻辑ExtensionRegistry.parse(_:name:)会剥离https://、github.com/等前缀与末尾的.git并识别浏览器复制出来的/tree/ref/path形式的链接ref默认main路径默认extensionspath会被规范化去掉首尾斜杠。几个关键行为只下载扩展自己的文件夹绝不下载整个仓库客户端用一次递归 Git tree API 拿到目标路径下的文件清单再逐个拉取 raw 文件并跳过node_modules与metadata目录后者体积大且与运行无关。若目录过大导致 tree 被截断会直接报错而不是下载一个不完整的扩展。注册表还支持指定ref分支、标签或 commit分支意味着那里现在有什么就用什么。内置注册表Store 与官方 GitHub不可编辑、不可删除只有用户自己添加的注册表可以删除或改名。由于 Store 是预编译的在合并搜索结果时Store 结果优先ExtensionStoreClient.search的注释明确写着 the store wins, because it is prebuilt。从源码安装的构建流程从 GitHub 源码安装时Tinycast 会依次执行package manager install --ignore-scripts——安装依赖运行扩展自身的构建脚本对 Raycast 扩展而言通常是ray build。安装脚本被刻意跳过--ignore-scripts因为那是没人要求运行的代码。如果扩展在缺少安装脚本的情况下无法构建那么它会在构建步骤直接失败而不是先装一个半残的扩展。对应的参数定义见 Tinycast/Features/Extensions/Model/ExtensionPackageManager.swiftpnpm/Yarn/Bun 使用install --ignore-scriptsnpm 额外追加--no-audit --no-fund关掉审计与赞助提示。构建细节同样值得了解Tinycast/Features/Extensions/Service/ExtensionInstaller.swift若node_modules/.bin/ray存在会调用ray build -e env -o output --non-interactive且输出目录永远不会指向源码目录防止开发式安装清空源码若不存在ray非标准 Raycast 项目则退化为运行 manifest 的build脚本并在原地校验产物。构建环境参数-e会自动探测如果扩展目录里出现Cargo.toml即包含 Rust 辅助组件使用dev环境其 Rust 插件会桩化掉仅为 Windows 服务的rust:类型命令否则使用dist——因为dist会为 Windows 构建rust:助手那是 macOS 上的死代码且需要本机没有的 Rust 工具链。子进程设置CI1阻止 npm 向输出里刷进度条与NO_COLOR1失败时只截取输出的末尾 6 行展示包管理器真正的错误信息都在尾部。整个安装有5 分钟超时commandTimeout 300足以覆盖慢速网络下的冷安装又不会让一个卡死的子进程无限挂起临时工作目录使用tinycast-install-UUID命名并保证无论成功失败都会清理defer删除这也是下文存储清理能兜底崩溃残留的基础。安装进度会以明确的阶段呈现Downloading…→Installing dependencies with pnpm…→Building…→Installing…避免长时间静默被误认为卡死。包管理器Package managers配置入口Settings → Extensions → Package manager。Automatic自动默认会按pnpm → Bun → Yarn → npm的顺序使用你本机第一个可用的包管理器源码中ExtensionPackageManager.preferenceOrder [.pnpm, .bun, .yarn, .npm]。理由写在注释里最快、最省磁盘的排最前几乎必然存在的 npm 排最后。这里有一个关键的技术背景从 Dock 启动的 GUI 应用不会继承你终端里的PATH。因此 Tinycast 不会依赖 shell 环境而是自行在常规位置探测可执行文件searchPaths数组见ExtensionPackageManager.swiftHomebrew/opt/homebrew/bin、/usr/local/bin以及兜底的/usr/bin、/binVolta~/.volta/binBun~/.bun/binasdf~/.asdf/shimsmise~/.local/share/mise/shimsfnm~/.local/share/fnm/aliases/default/binnvm~/.nvm/versions/node/current/binYarn~/.yarn/bin以及~/.npm-global/bin包管理器面板会如实显示探测结果例如 Found pnpm at /opt/homebrew/bin/pnpm或者告诉你本机什么都没装此时使用源码注册表会失败。由于ray build运行在 Node 之上构建前还会单独探测node可执行文件nodeURL并把 Node 所在目录插入子进程 PATH 的最前面——因为版本管理器常常把 Node 藏起来而包管理器会从 PATH 上派生ray。自定义搜索路径Custom search paths对于内置列表之外的场景典型如NixRegistries 面板提供Custom search paths自定义搜索路径一个用冒号分隔的文件夹列表语义与PATH相同并且排在常规位置之前检查——因此你自定义的目录可以覆盖内置路径。例如~/.local/share/mise/shims/etc/profiles/per-user/you/home-path/bin后者即 Nix Home Manager 的用户环境路径~/.local/share/mise/shims同时是面板输入框的默认提示文本。设置一次之后每一次从源码安装都会生效。解析规则ExtensionRegistriesPanel.parseSearchPaths按:切分并丢弃空段与纯空白段所以连续冒号不会产生空目录项。哪些内容不参与备份以下三项会被刻意排除在备份之外参见 Tinycast 备份文档因为它们描述的是这台 Mac而不是可迁移的用户数据注册表列表registry list包管理器选择package manager choice自定义搜索路径custom search paths换句话说备份的是内容而不是环境换一台机器恢复备份时扩展本身会回来但从哪里下载、用什么工具构建这种环境偏好不会跟着走。存储与卸载所有扩展都存放在 Tinycast 的 Application Support 文件夹下~/Library/Application Support/bundle-id/其中extensions/存放扩展本体、extension-data/存放扩展数据、extension-support/存放每个扩展各自的 scratch 目录。卸载一个扩展会删除与之相关的全部内容包括扩展本体与其存储、缓存它的偏好设置与 support 文件夹它在 Keychain 中的登录凭据sign-ins图标选择icon choice命令快捷键、收藏favorites、别名aliases与学习到的排序learned ranking卸载实现ExtensionCatalog.uninstall同时清理扩展目录与其专属 support 目录两条路径都覆盖到。Settings → Extensions → Storage则负责测量并清理残留构建文件夹——那种崩溃的安装可能遗留下来的东西例如命名前缀tinycast-install-的临时工作目录以及孤立在 support/data 根下、不再对应任何已安装扩展的条目。清理逻辑见 Tinycast/Features/Extensions/Service/ExtensionCleanup.swift只扫描三个明确根目录临时目录、support、data范围刻意收窄即使扩展整体被关闭也依然可用设置面板把 Storage 区块放在启用扩展开关组之外注释明确说 leftovers are on disk whether or not extensions are on正常情况下它显示为空——因为正常安装的临时目录会被defer及时清掉清理前会先计算可回收的报告reclaimable按钮按下前就能显示将释放多少项、多少字节且计数使用与 Finder 一致的文件大小口径ByteCountFormattercountStyle: .file让面板数字与Get Info对得上。最后一点边界保证Tinycast 永远不会触碰你自己的~/Library/pnpm或~/.npm——它只在自己的沙箱目录内作业你的全局包管理器缓存始终保持干净。小结围绕Install入口Tinycast 给出了清晰的取舍日常安装走Store 注册表预编译、零工具链已有 Raycast 环境则一键Import from Raycast纯复制、离线完成想构建自己的扩展用Add from folder指向构建产物需要自定义来源时添加GitHub 注册表此时才需要 Node 与包管理器且--ignore-scripts保证只运行显式声明的构建脚本。理解注册表两种形态、Automatic 的探测顺序与自定义搜索路径的优先级就能在绝大多数场景下做到安装即用、卸载干净。赞分享桌面应用【免费下载链接】tinycastTinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history.项目地址https://gitcode.com/GitHub_Trending/ti/tinycast点击查看免费下载相关推荐Tinycast 扩展系统完全指南用 JavaScriptCore 原生运行 Raycast 扩展Tinycast 扩展系统完全指南用 JavaScriptCore 原生运行 Raycast 扩展 Tinycast 是一个完全原生的 macOS 启动器、热桌面应用Tinycast 原生运行 Raycast 扩展JavaScriptCore 嵌入式运行时架构与实践指南Tinycast 原生运行 Raycast 扩展JavaScriptCore 嵌入式运行时架构与实践指南 Tinycast 是一款完全原生的 macOS 启动桌面应用Tinycast 命令全指南内置命令、自定义 Shell 命令与 Raycast 脚本导入实战Tinycast 命令全指南内置命令、自定义 Shell 命令与 Raycast 脚本导入实战 本篇技术指南以 Tinycast 的命令系统为主题覆盖三类能桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →