以库形式集成 Repomix:在 Node.js 应用中调用 runCli 与核心打包 API
发布时间:2026/9/11 22:55:15来源:尧图网络
以库形式集成 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/repomixRepomix 不仅能作为命令行工具使用其完整打包能力同样以模块化 API 的形式暴露给 Node.js 开发者。本文以 website/client/src/es/guide/development/using-repomix-as-a-library.md 为骨架结合仓库源码讲解如何通过runCli以编程方式驱动完整 CLI 能力、用底层核心组件searchFiles、collectFiles、processFiles、TokenCounter构建自定义流水线以及把 Repomix 打进自己的产物bundle时需要处理的外部依赖与 WASM 资源。读完本文你将能把整个代码库打包成 AI 友好文件的能力直接嵌入自己的应用。安装将 Repomix 作为项目依赖安装npm install repomix安装后即可从repomix包中按需引入。仓库在 src/index.ts 中统一导出所有公开 API包括CLI 层runCli、cli、runInitAction、runDefaultAction、runRemoteAction及类型CliOptions文件流水线searchFiles、collectFiles、processFiles、sortPaths、generateFileTree打包入口pack及类型PackResult指标与安全TokenCounter、runSecurityCheck配置loadFileConfig、mergeConfigs、defineConfig。这些导出src/index.ts是下文所有示例的直接依据。基本用法通过 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: string[], cwd: string, options: CliOptions)src/cli/cliRun.ts其中directories要处理的目录列表等价于 CLI 的位置参数cwd工作目录决定相对路径解析的基准options与命令行 flag 一一对应的CliOptions对象。runCli内部会先根据quiet/verbose/stdout调整日志级别再依次分发到初始化--init、远程仓库处理--remote或位置参数为显式 URL、watch 模式与默认打包动作src/cli/cliRun.ts。有一点值得注意真实 CLI 入口会自动注入enableFileProcessors: true来启用外部命令处理器而通过runCli/pack调用的库场景默认关闭该能力src/cli/cliRun.ts这为库调用提供了更安全的默认行为。常用 CliOptions 字段速查CliOptions的完整定义见 src/cli/types.ts以下是与库调用最相关的字段字段类型说明默认值outputstring输出文件路径-表示输出到 stdout默认repomix-output.xmlstylexml \| markdown \| json \| plain输出格式默认xmlcompressboolean用 Tree-sitter 提取类、函数、接口等核心结构removeCommentsboolean打包前剥离所有代码注释removeEmptyLinesboolean删除所有文件中的空行include/ignorestring逗号分隔的 glob 模式如src/**/*.js,*.mdgitignore/dotIgnore/defaultPatternsboolean是否应用.gitignore、.ignore及内置默认忽略规则remotestring要克隆并打包的远程仓库 URL 或owner/repo简写remoteBranchstring指定分支、tag 或 commitremoteTrustConfigboolean是否信任并加载远程仓库内的配置文件tokenCountEncodingstring分词器编码默认o200k_base即 GPT-4otokenBudgetnumber输出超过该 token 数时以非零码退出CI/上下文护栏includeDiffs/includeLogsboolean在输出中加入 git diff / 提交历史verbose/quietboolean调整日志级别二者互斥深入理解 packResultresult.packResult携带了本次打包的全部统计信息对应源码中的PackResult接口src/core/packager.ts。除原文档列出的字段外还包括totalFiles处理的文件总数totalCharacters字符总数totalTokenstoken 总数用于评估 LLM 上下文上限fileCharCounts每个文件的字符数Recordstring, numberfileTokenCounts每个文件的 token 数gitDiffTokenCount/gitLogTokenCountdiff 与日志部分的 token 数outputFiles实际写入的输出文件路径支持--split-output分片suspiciousFilesResults/suspiciousGitDiffResults/suspiciousGitLogResults安全扫描发现的敏感文件列表processedFiles处理后的文件内容数组skippedFiles因二进制、超过大小上限等原因跳过的文件及原因。处理远程仓库runCli同样可以克隆并打包远程仓库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。这一默认关闭策略与 CLI 中--remote-trust-config的设计一致src/cli/cliRun.ts。另外源码还支持两种隐式远程识别位置参数直接传显式 URLhttps://、git、ssh://、git://前缀或传owner/repo简写——后者只有在本地不存在同名路径且通过 GitHubls-remote探针确认可达时才会被当作远程处理src/cli/cliRun.ts避免误把拼错的本地路径当成克隆目标。使用底层核心组件构建自定义流水线当需要更精细的控制例如自定义过滤、分析 token 分布时可以直接组合 Repomix 的低层 APIimport { 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); await tokenCounter.init(); // 注意使用前必须先初始化 // 3. 返回分析结果 return processedFiles.map((file) ({ path: file.path, tokens: tokenCounter.countTokens(file.content), })); }四个组件的职责与源码实现如下searchFiles(rootDir, config)基于 globby 在目录内搜索文件同时融合.gitignore、.ignore、.repomixignore、.git/info/exclude与内置默认忽略规则返回{ filePaths, emptyDirPaths }src/core/file/fileSearch.ts。它还处理了 git worktree 引用文件、符号链接等边界情况。collectFiles(filePaths, rootDir, config)以 50 路并发读取文件内容返回{ rawFiles, skippedFiles }src/core/file/fileCollect.ts跳过二进制或超出maxFileSize的文件并记录原因。processFiles(rawFiles, config)两阶段处理流水线——需要压缩/去注释时启用 worker 线程执行removeComments → compress随后在主线程统一应用truncateBase64 → removeEmptyLines → trim → showLineNumbers等轻量转换src/core/file/fileProcess.ts。TokenCounter(encoding)基于gpt-tokenizer实现必须先await tokenCounter.init()再调用countTokens()否则会抛出 TokenCounter not initialized 错误src/core/metrics/TokenCounter.ts。编码可选o200k_baseGPT-4o、cl100k_baseGPT-3.5/4等。searchFiles与processFiles需要的是合并后的完整配置对象RepomixConfigMerged。在库场景中可以先用loadFileConfig读取repomix.config.json再用mergeConfigs与代码内配置合并两者均由 src/index.ts 导出若不需要任何配置也可以直接传入由defineConfig构建的空配置。将 Repomix 打进你自己的产物把 repomix 作为依赖打进自己的 bundle如用 Rolldown 或 esbuild时有几项资源必须特殊处理必须保持 external 的依赖tinypool它以文件路径方式创建 worker 线程无法被打包内联。必须复制的 WASM 文件web-tree-sitter.wasm→ 复制到与打包后 JS 相同的目录--compress代码压缩功能依赖它Tree-sitter 语言文件 → 复制到由环境变量REPOMIX_WASM_DIR指定的目录。仓库自身在 website/server/scripts/bundle.mjs 中提供了一个可运行的真实示例使用 Rolldown 构建external: [tinypool]website/server/scripts/bundle.mjs并将node_modules/web-tree-sitter/web-tree-sitter.wasm复制到产物根目录、把node_modules/repomix/tree-sitter-wasms/out下的全部语言 WASM 复制到dist-bundled/wasm/website/server/scripts/bundle.mjs。在代码层面也可以不依赖环境变量直接调用setWasmBasePath(basePath)指定 WASM 的查找目录src/core/treeSitter/loadLanguage.ts。注意 WASM 的加载是惰性的只有真正用到 Tree-sitter 解析compress/parseFile时才会读取因此即使不启用压缩功能也建议把文件带上以免运行时找不到。真实世界案例官网如何以库方式处理远程仓库Repomix 官网Try It 在线体验就是把 Repomix 当库使用的实例服务端在 website/server/src/domains/pack/remoteRepo.ts 中先以加固后的 git 参数禁用重定向、仅允许 https、60 秒超时浅克隆公开仓库然后调用从repomix包导入的parseRemoteValue与runDefaultAction完成打包website/server/src/domains/pack/remoteRepo.ts。这个案例展示了库集成的两个关键实践安全边界用户输入只用于生成配置克隆前通过 URL 白名单校验防止 SSRF 与本地文件读取--remote-trust-config之类的信任开关默认关闭进程隔离runDefaultAction默认打包动作可被直接复用同时以untrustedPackCliOptions构建受限的 CLI 选项确保任意输入的打包行为可预期。如果你要构建类似的粘贴仓库地址 → 返回 AI 友好文件的服务这条安全克隆 库内打包 缓存结果的链路可以直接照搬。总结以库方式使用 Repomix 有三层选择runCli提供与 CLI 完全一致的完整能力适合快速集成pack函数src/core/packager.ts适合需要精细化控制打包流程并拿到完整PackResult的场景searchFiles → collectFiles → processFiles → TokenCounter的底层流水线则让你自由定制每一步。在打进产物时牢记tinypool需保持 external、WASM 文件需复制到位即可在任意 Node.js 应用中安全、可靠地输出 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),仅供参考
网站建设高端定制企业官网