ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

将 Repomix 作为 Node.js 库集成:用 `runCli` 与核心 API 在你的应用中打包 AI 友好的代码库

2026/9/12 14:47:26 拓冰建站 浏览量
将 Repomix 作为 Node.js 库集成:用 `runCli` 与核心 API 在你的应用中打包 AI 友好的代码库 将 Repomix 作为 Node.js 库集成用runCli与核心 API 在你的应用中打包 AI 友好的代码库【免费下载链接】repomix Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codebase to Large Language Models (LLMs) or other AI tools like Claude, ChatGPT, DeepSeek, Perplexity, Gemini, Gemma, Llama, Grok, and more.项目地址: https://gitcode.com/GitHub_Trending/rep/repomix本文介绍如何不通过 CLI 命令而是把 Repomix 作为 Node.js 库直接集成进你的应用从npm install repomix安装开始使用runCli一键打包本地目录与远程仓库再到借助searchFiles、collectFiles、processFiles、TokenCounter等底层 API 实现精细化控制最后说明将 Repomix 打进你自己的 bundle如 Rolldown/esbuild时必须处理的外部依赖与 WASM 资源。读完你可以在自己的脚本、服务端程序或构建流水线中直接调用 Repomix 的能力生成面向 LLM 的代码库打包产物。为什么以库的方式使用 RepomixRepomix 的核心价值是把整个仓库打包成一个适合喂给 Claude、ChatGPT、DeepSeek 等大语言模型的单文件。除了一般的 CLI 用法npx repomix直接运行你也可以把它的功能作为编程接口集成进 Node.js 应用——例如在 CI 中自动生成打包产物、构建 SaaS 服务让用户上传 URL 后在线打包、或在编辑器插件里实时统计 token 预算。库模式让你可以读取打包结果的结构化数据文件数、字符数、token 数而不仅仅是拿到一个输出文件。仓库的公共导出面定义在 src/index.tsrunCli与pack是两条高层入口searchFiles、collectFiles、processFiles、TokenCounter是低层组件此外还导出了loadFileConfig、mergeConfigs、defineConfig、setLogLevel等配置与工具函数。下面按从易到难的层次逐一展开。安装把 Repomix 安装为项目依赖即可npm install repomix安装后所有公共 API 都可以从repomix包中直接导入包括对应的 TypeScript 类型项目本身是 TypeScript 编写并导出类型声明。基础用法通过runCli复用完整 CLI 能力最简单的方式是调用runCli函数。它提供与命令行界面相同的全部功能只是以编程方式驱动。示例import { runCli, type CliOptions } from repomix; // 使用自定义选项处理当前目录 async function packProject() { const options { output: output.xml, style: xml, compress: true, quiet: true } as CliOptions; const result await runCli([.], process.cwd(), options); return result.packResult; }runCli的签名是runCli(directories, cwd, options)第一个参数是要处理的目录列表可传多个目录实现多根打包第二个参数是工作目录用于解析相对路径与配置文件第三个参数是选项对象。从 src/cli/cliRun.ts 的实现看runCli内部会先完成一系列归一化工作当output为-时自动切换为 stdout 模式根据quiet/verbose/stdout设置日志级别quiet与stdout都对应 SILENT 级别随后按优先级分发——MCP 模式、版本查询、--init、远程仓库remote选项或位置参数中的显式远程 URL、watch 模式最后才落到本地目录的默认打包流程。PackResult一次打包的结构化回报result.packResult中包含了本次处理的完整统计信息完整字段定义见 src/core/packager.ts字段含义totalFiles处理的文件总数totalCharacters字符总数totalTokensToken 总数对评估 LLM 上下文预算非常有用fileCharCounts每个文件的字符数以文件路径为 keyfileTokenCounts每个文件的 token 数以文件路径为 keyoutputFiles实际写出的输出文件路径列表启用--split-output时包含多个suspiciousFilesResults/suspiciousGitDiffResults/suspiciousGitLogResults安全扫描发现的疑似敏感文件列表processedFiles处理后的文件内容与元数据skippedFiles因大小、权限等原因跳过的文件信息其中totalTokens可以直接用于判断打包产物是否超出目标 LLM 的上下文窗口从而在喂给模型前做出取舍。处理远程仓库runCli同样支持克隆并处理远程仓库只需传入remote选项import { runCli, type CliOptions } from repomix; // 克隆并处理一个 GitHub 仓库 async function processRemoteRepo(repoUrl) { const options { remote: repoUrl, output: output.xml, compress: true } as CliOptions; return await runCli([.], process.cwd(), options); }remote选项接受 GitHub URL 或owner/repo简写格式。在 src/cli/cliRun.ts 中可以看到runCli会优先检查options.remote随后对位置参数做两种自动检测显式远程 URLhttps://、git、ssh://、git://前缀会被直接判定为远程而owner/repo简写在本地不存在同名路径且能通过git ls-remote探活确认仓库可达时也会被当作远程处理误写的本地路径不会触发克隆。远程配置信任默认不加载安全第一[!NOTE] 出于安全考虑远程仓库中的配置文件默认不会被加载。要信任远程仓库的配置请在选项中添加remoteTrustConfig: true或设置环境变量REPOMIX_REMOTE_TRUST_CONFIGtrue。这一点是远程处理的安全基石远程仓库的内容由第三方控制其repomix.config.*可能包含恶意指令或指向本地文件的output.instructionFilePath因此默认不执行。在 src/cli/actions/remoteAction.ts 中可以看到信任判定逻辑const trustRemoteConfig cliOptions.remoteTrustConfig || process.env.REPOMIX_REMOTE_TRUST_CONFIG true;当判定为不信任时会设置skipLocalConfig: truesrc/cli/actions/remoteAction.ts跳过加载克隆仓库自带的配置文件同时enableFileProcessors允许配置文件中的input.processors运行外部命令的能力也只在真实 CLI 入口被注入并受信任配置门控。如果仓库自身没有配置文件则不需要关心此项只有当远程仓库携带配置且你确认可信时才显式开启。使用核心组件更精细的底层控制当runCli的抽象层次不够用时可以直接使用 Repomix 的低层 API 组合出你自己的处理流水线。这些 API 分别对应打包流水线的不同阶段import { searchFiles, collectFiles, processFiles, TokenCounter } from repomix; async function analyzeFiles(directory) { // 1. 搜索并收集文件应用 .gitignore、内置默认忽略规则、include/ignore 模式 const { filePaths } await searchFiles(directory, { /* 配置 */ }); const rawFiles await collectFiles(filePaths, directory); const processedFiles await processFiles(rawFiles, { /* 配置 */ }); // 2. 统计 token const tokenCounter new TokenCounter(o200k_base); // 3. 返回分析结果 return processedFiles.map(file ({ path: file.path, tokens: tokenCounter.countTokens(file.content) })); }各阶段的职责与源码位置searchFiles负责文件发现。它遍历目录、应用.gitignore/.ignore/内置默认忽略规则以及 include/ignore 模式返回FileSearchResult包含filePaths与emptyDirPaths两个字段见 src/core/file/fileSearch.ts。collectFiles负责读取文件内容。内部以 50 路并发读盘FILE_COLLECT_CONCURRENCY见 src/core/file/fileCollect.ts并按maxFileSize限制跳过超大文件返回rawFiles与skippedFiles。processFiles对原始内容做处理例如compress模式下的 Tree-sitter 结构抽取、注释移除、空行清理等实现于 src/core/file/fileProcess.ts。TokenCountertoken 计数器的独立封装见 src/core/metrics/TokenCounter.ts。构造时传入编码名称如o200k_base、cl100k_base底层基于gpt-tokenizer并以异步懒加载方式初始化 BPE 数据。注意使用前需要先await tokenCounter.init()之后即可通过countTokens(content, filePath?)统计任意文本的 token 数失败时返回 0 并输出警告日志不会中断你的流程。这套组合方式非常适合构建自定义分析工具——比如按 token 数给文件排序、生成仓库 token 分布报告、或在打包前过滤超出预算的文件。打包时的注意事项外部依赖与 WASM 资源如果你用 Rolldown、esbuild 等工具把包含 Repomix 的应用打包成单文件有两类资源必须特殊处理。必须保持外部化的依赖不能被 bundletinypool—— 它通过文件路径启动 worker 线程bundle 后路径解析会失效。必须拷贝的 WASM 文件web-tree-sitter.wasm→ 拷贝到与打包后 JS 相同的目录compress代码压缩功能依赖它。Tree-sitter 语言文件 → 拷贝到由环境变量REPOMIX_WASM_DIR指定的目录每种编程语言对应一个语言 WASM 文件。官方网站服务端的打包脚本是可直接参考的完整示例website/server/scripts/bundle.mjs。它用 Rolldown 做两次打包完整服务的server.mjs与 tinypool worker 的最小worker.mjsexternal: [tinypool]保持外部化随后在collectWasmFiles()中把node_modules/web-tree-sitter/web-tree-sitter.wasm拷贝到输出根目录、把node_modules/repomix/tree-sitter-wasms/out下的全部语言 WASM 文件拷贝到wasm/子目录并设置REPOMIX_WASM_DIR指向该目录。如果你的打包产物中缺少这些 WASMcompress: true等功能会静默降级或失败。真实案例Repomix 官网如何以库的方式使用Repomix 官方网站在线打包服务就是把 Repomix 作为库的生产级实例。其服务端在收到用户提交的仓库 URL 后执行URL 校验 → 浅克隆到临时目录 → 以库方式打包 → 缓存结果的完整流程核心实现在 website/server/src/domains/pack/remoteRepo.ts。其中值得借鉴的要点它不通过runCli而是直接调用runDefaultActionrunCli内部最终也会走到这条默认动作见 src/cli/actions/defaultAction.ts以获得更细的进度回调与配置控制克隆命令做了 SSRF 加固禁用重定向、仅允许 https 协议http.followRedirectsfalse、protocol.https.allowalways打包完成后会从packResult中抽取totalFiles、totalCharacters、totalTokens组装元数据并基于fileCharCounts/fileTokenCounts生成按 token 数排序的 top 文件列表对打包结果按 URL格式选项生成缓存键命中缓存时直接返回避免重复克隆与打包。这与 website/server/src/actions/packAction.ts 中的 HTTP 动作层配合构成了完整的在线打包服务——你可以把同样的模式搬到自己的服务里。小结把 Repomix 作为库使用有三种递进层次直接用runCli获得与 CLI 等价的一站式打包能力本地与远程都支持并读取PackResult中的文件数、字符数与 token 数或者用searchFiles→collectFiles→processFiles→TokenCounter搭建自定义流水线实现精细化控制最终在生产环境部署时记得遵循本文的 bundling 指南处理tinypool外部化与 Tree-sitter WASM 资源。处理远程仓库时牢记配置文件默认不被信任的安全模型仅在确认可信时通过remoteTrustConfig: true或REPOMIX_REMOTE_TRUST_CONFIGtrue显式开启。【免费下载链接】repomix Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codebase to Large Language Models (LLMs) or other AI tools like Claude, ChatGPT, DeepSeek, Perplexity, Gemini, Gemma, Llama, Grok, and more.项目地址: https://gitcode.com/GitHub_Trending/rep/repomix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考