ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

将 Repomix 作为 Node.js 库集成:runCli、核心 API 与打包构建实战指南

将 Repomix 作为 Node.js 库集成:runCli、核心 API 与打包构建实战指南 将 Repomix 作为 Node.js 库集成runCli、核心 API 与打包构建实战指南【免费下载链接】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导读Repomix 不只是命令行工具其核心能力已封装为一套可直接 import 的 Node.js API。本指南以官方「Using Repomix as a Library」文档为主体结合本仓库源码讲解如何通过runCli完成本地目录与远程仓库打包、如何用searchFiles/collectFiles/processFiles/TokenCounter等底层 API 构建自定义分析流水线以及使用 Rolldown/esbuild 打包时如何处理tinypool与 WASM 文件。读完本文你将能把 Repomix 的「仓库 → 单个 AI 友好文件」能力无缝嵌入自己的 Node.js 应用。安装将 Repomix 作为项目依赖安装npm install repomix安装完成后即可从repomix包中导入 CLI 入口、核心组件与类型定义。仓库主入口 src/index.ts 统一导出了pack、runCli、searchFiles、collectFiles、processFiles、TokenCounter、loadFileConfig、mergeConfigs、defineConfig等全部公开 API其中runCli与pack同源于 src/core/packager.ts 的打包管线。基础用法通过 runCli 一键打包runCli(directories, cwd, options)是库集成最直接的入口其行为与命令行repomix完全一致。函数签名定义在 src/cli/cliRun.ts第一个参数是要处理的目录数组第二个参数是工作目录第三个参数是选项对象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; }CliOptions定义于 src/cli/types.ts包含 CLI 的全部选项。常用项及默认值选项说明默认值output输出文件路径传-表示写往 stdoutrepomix-output.xmlstyle输出格式xml/markdown/json/plainxmlcompress用 Tree-sitter 抽取类、函数、接口等核心结构关闭quiet除错误外抑制所有控制台输出适合脚本场景关闭verbose输出详细调试日志与quiet互斥关闭remote远程仓库地址GitHub URL 或owner/repo无remoteBranch远程仓库的分支、标签或提交仓库默认分支remoteTrustConfig信任并加载远程仓库的配置文件关闭include/ignore附加的 glob 包含/排除模式逗号分隔无gitignore/dotIgnore是否使用.gitignore/.ignore规则过滤开启copy处理后把输出复制到系统剪贴板关闭stdout直接输出到 stdout 而非文件与output互斥关闭tokenCountEncoding计数字典o200k_base(GPT-4o)、cl100k_base(GPT-3.5/4) 等o200k_basetokenBudget输出超 N tokens 时以非零码失败CI/上下文护栏无从源码看runCli内部会按优先级依次分派mcp、version、init、remote、位置参数中的显式远程 URL、watch、GitHub 简写owner/repo需通过git ls-remote探活确认存在、最后落入本地默认流程runDefaultAction。quiet、verbose、stdout会直接调节全局日志级别见 src/shared/logger.ts。result.packResult即PackResult见 src/core/packager.ts包含打包全部统计信息totalFiles处理的文件总数totalCharacters总字符数totalTokens总 token 数用于评估 LLM 上下文窗口是否够用fileCharCounts每个文件的字符数映射fileTokenCounts每个文件的 token 数映射gitDiffTokenCount/gitLogTokenCountdiff / log 部分占用的 tokenoutputFiles生成的输出文件路径列表支持--split-output分片suspiciousFilesResults/suspiciousGitDiffResults/suspiciousGitLogResults安全检查发现的可疑文件API Key、密码等processedFiles/safeFilePaths/skippedFiles处理、放行与被跳过的文件明细处理远程仓库runCli同样支持远程仓库设置remote选项后Repomix 会先克隆再打包。底层由 src/cli/actions/remoteAction.ts 的runRemoteAction实现GitHub 仓库优先走归档archive下载失败则回退git clone --depth 1浅克隆处理完成后把输出文件复制回当前目录并清理临时目录。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); }[!NOTE] 出于安全考虑远程仓库中的配置文件默认不会被加载。若要信任远程仓库的配置请给选项加上remoteTrustConfig: true或设置环境变量REPOMIX_REMOTE_TRUST_CONFIGtrue。这一安全默认值在源码中有多重印证src/cli/actions/remoteAction.ts 在信任远程配置前会调用confirmRemoteConfigTrust交互确认同时强制skipLocalConfig、skipMigration不迁移远程克隆中的遗留 Repopack 文件并仅当显式信任时才开启enableFileProcessors文件处理器会执行任意命令。另外远程模式下--config必须是绝对路径防止从克隆仓库加载配置。使用核心组件构建自定义流水线需要更精细控制时可直接使用 Repomix 的低层 API。它们的导出与调用链如下API导出位置作用searchFiles(rootDir, config, explicitFiles?, confineToBaseDir?)src/core/file/fileSearch.ts基于 ignore/gitignore 规则搜索并过滤文件返回FileSearchResultcollectFiles(filePaths, rootDir, config, progressCallback?)src/core/file/fileCollect.ts读取原始文件内容返回RawFile[]及跳过文件信息processFiles(rawFiles, config, progressCallback)src/core/file/fileProcess.ts执行压缩/去注释/去空行等文件级加工返回ProcessedFile[]TokenCounter(encodingName)src/core/metrics/TokenCounter.ts按指定编码统计 token 数import { searchFiles, collectFiles, processFiles, TokenCounter } from repomix; async function analyzeFiles(directory) { // 1. 搜索并收集文件 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) })); }注意事项TokenCounter是懒加载的countTokens前必须先await tokenCounter.init()否则会抛出 TokenCounter not initialized见 TokenCounter.ts。其底层使用gpt-tokenizer的resolveEncodingAsync按需加载 BPE 词表o200k_base、cl100k_base等编码定义在 src/core/metrics/tokenEncodings.ts。searchFiles返回的FileSearchResult含filePaths与emptyDirPaths配合includeEmptyDirectories使用collectFiles的返回结构还包含被跳过的文件二进制、超限文件等便于诊断。这些 API 全部从 src/index.ts 顶层导出配置对象可先用loadFileConfigmergeConfigs加载合并repomix.config.json或用defineConfig获得类型提示。若需要一次性走完整管线并获得PackResult也可以直接调用pack(rootDirs, config, progressCallback)src/core/packager.ts——它内部就是依次执行 search → sort → collect → securityCheck → process → metrics → output并与 token 计数缓存、git diff/log 并行化。打包Bundling注意点当用 Rolldown 或 esbuild 把 Repomix 打进自己的产物时部分依赖无法打包、部分资源必须复制必须保持 external 的依赖tinypool—— 它通过文件路径启动 Worker 线程无法静态打包必须复制的 WASM 文件web-tree-sitter.wasm→ 复制到与打包后 JS 相同的目录--compress代码压缩功能依赖它定位 WASMtree-sitter 各语言文件 → 复制到环境变量REPOMIX_WASM_DIR指定的目录仓库自身给出了可运行的完整示例website/server/scripts/bundle.mjs。该脚本使用 Rolldown要点如下构建时声明external: [tinypool]用两个入口server与worker生成server.mjs和worker.mjstinypool 的 worker 需独立入口collectWasmFiles()把node_modules/web-tree-sitter/web-tree-sitter.wasm复制到dist-bundled/根目录把node_modules/repomix/tree-sitter-wasms/out/*.wasm批量复制到dist-bundled/wasm/。复制语言 WASM 后可在应用启动时调用setWasmBasePath(dir)从 src/index.ts 导出实现在 src/core/treeSitter/loadLanguage.ts显式指定 tree-sitter WASM 目录--compress只在启用时才会按需加载对应语言的 WASM。真实案例官网的无服务器打包服务Repomix 官网把 Repomix 作为库直接使用为访问者打包任意公开远程仓库。实现位于 website/server/src/domains/pack/remoteRepo.tsprocessRemoteRepo先对 URL 做公开 HTTPS 白名单校验防 SSRF/本地文件读取用硬化的 git 配置禁用重定向、protocol.allownever浅克隆到临时目录再用buildUntrustedPackCliOptions构造不受信任的 CLI 选项securityCheck: false、不加载远程配置调用runDefaultAction([tempDirPath], ...)最后读取生成的输出、附带totalFiles/totalCharacters/totalTokens元数据与按 token 排序的 Top 文件列表返回并写入缓存finally中清理临时目录与输出文件。这个案例展示了库集成的最佳实践把远端内容视为不受信任输入、隔离临时目录、显式关闭会执行任意代码/加载远端配置的特性、最后安全清理。结语从一行runCli到精细的低层 APIRepomix 作为 Node.js 库既提供了开箱即用的打包能力也保留了完整可控的扩展空间。集成时请重点留意三点远程仓库配置的信任开关remoteTrustConfig/REPOMIX_REMOTE_TRUST_CONFIG、TokenCounter的异步初始化、以及打包构建时对tinypool与 WASM 文件的特殊处理。参考官网服务端 remoteRepo.ts 与 bundle.mjs 的实现即可在自己的应用中稳定落地这套「仓库 → 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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表