ARTICLE DETAIL

资讯详情

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

在 Node.js 应用中集成 Repomix:将仓库打包为 AI 友好文件的能力嵌入自有代码

在 Node.js 应用中集成 Repomix:将仓库打包为 AI 友好文件的能力嵌入自有代码 在 Node.js 应用中集成 Repomix将仓库打包为 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/repomixRepomix 的核心价值在于把整个代码仓库打包成单个、可供 LLMClaude、ChatGPT、DeepSeek 等直接消费的文件。除了命令行工具之外它同时导出一组完整的 Node.js 库 API你可以通过runCli获得与 CLI 完全一致的打包能力也可以直接调用searchFiles、collectFiles、processFiles、TokenCounter等底层组件把仓库扫描 → 文件收集 → 内容处理 → Token 统计的整条流水线嵌入自己的应用。本文基于当前仓库的源码与文档完整讲解从安装、基础打包、远程仓库处理到底层 API、打包Bundling注意事项的实战方案。安装与包入口在 Node.js 项目中把 Repomix 安装为普通依赖即可npm install repomix安装完成后包通过 package.json 中的exports字段暴露模块入口./lib/index.js与类型声明./lib/index.d.ts包为 ESM 格式。所有可供库调用者使用的导出集中在 src/index.ts主要分为几组Corepack、collectFiles、searchFiles、processFiles、sortPaths、TokenCounter、parseFile等ConfigloadFileConfig、mergeConfigs、defineConfig、defaultIgnoreListGitparseRemoteValue、isValidShorthand等远程仓库解析工具CLIcli、runCli、runInitAction、runDefaultAction、buildCliConfig、runRemoteAction以及CliOptions类型Worker供打包环境使用unifiedWorkerHandler等。下文的核心示例全部来自这些公开导出。基础用法runCli一行代码获得 CLI 同等能力最简洁的集成方式是runCli函数它复用了 CLI 内部的完整动作流程见 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; }runCli(directories, cwd, options)的三个参数分别是待处理的目录列表、工作目录用于解析相对路径与配置文件、以及 CLI 选项对象。从源码可以确认几个值得注意的行为当options.output -时runCli会自动切换到 stdout 模式src/cli/cliRun.tsquiet/verbose/stdout会分别把日志级别切换到SILENT/DEBUG/SILENT位置参数本身若是远程 URLhttps://、git、ssh://等会自动转入远程仓库处理分支传入--mcp时会启动 MCP 服务器模式runMcpAction。CliOptions的完整字段定义见 src/cli/types.ts几乎与 CLI 的--选项一一对应常用字段包括分组字段说明输出output/stdout输出文件路径或-表示 stdout输出stylexml、markdown、json、plain输出compress用 Tree-sitter 解析提取类、函数、接口等核心结构输出removeComments/removeEmptyLines/truncateBase64去掉注释、空行、截断 base64 长串输出headerText/instructionFilePath在输出开头注入自定义文本或指令文件输出splitOutput按字节数切分输出如500kb、2mb文件选择include/ignore追加包含/排除的 glob 模式文件选择gitignore/dotIgnore/defaultPatterns是否启用.gitignore、.ignore、内置默认忽略规则远程仓库remote/remoteBranch/remoteTrustConfig克隆远程仓库及其分支、是否信任远端配置TokentokenCountEncoding/tokenBudget编码模型默认o200k_base与预算上限其他quiet/verbose/watch/mcp/sandbox等日志、监听模式、MCP 沙箱等理解PackResultresult.packResult的类型是PackResult定义见 src/core/packager.ts除了原文档列出的字段外还包含更多有用信息totalFiles处理的文件总数totalCharacters总字符数totalTokens总 Token 数可用于判断是否超出 LLM 上下文限制fileCharCounts/fileTokenCounts按文件统计的字符数与 Token 数outputFiles本次生成的文件列表配合splitOutput时会有多个suspiciousFilesResults/suspiciousGitDiffResults/suspiciousGitLogResults安全扫描发现的可疑文件结果API Key、密码等敏感信息processedFiles处理后的文件内容数组safeFilePaths、skippedFiles通过安全检查的文件路径与跳过的文件及原因。如果只想拿到与 CLI 默认打包行为完全一致的低层入口还可以直接使用runDefaultAction/buildCliConfig同样从 src/index.ts 导出它是pack流程之上的高层封装。处理远程仓库runCli同样可以克隆并处理远程仓库——只需把 URL 放进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); }runCli遇到remote选项或位置参数本身是显式远程 URL、owner/repo简写且探测可达时会转入runRemoteAction分支执行克隆与打包src/cli/actions/remoteAction.ts。安全机制远端配置文件默认不被信任[!NOTE] 出于安全考虑远程仓库中的配置文件默认不会被加载。若要信任远程仓库的配置请在选项中设置remoteTrustConfig: true或设置环境变量REPOMIX_REMOTE_TRUST_CONFIGtrue。该行为在源码中有明确的落点runRemoteAction通过cliOptions.remoteTrustConfig || process.env.REPOMIX_REMOTE_TRUST_CONFIG true计算trustRemoteConfig当其为假时会把skipLocalConfig: true写入最终 CLI 配置src/cli/actions/remoteAction.ts从而跳过远程仓库内repomix.config.json等配置文件的加载避免执行来自不可信来源的配置逻辑例如配置驱动的指令文件读取。使用底层核心组件当runCli的高层封装无法满足定制需求时可以直接组合 Repomix 的低层 API。这些函数实际上正是pack流水线内部的各个阶段src/core/packager.ts 中依次执行 search → sort → collect → process → validate → metrics → produceOutputimport { searchFiles, collectFiles, processFiles, TokenCounter } from repomix; async function analyzeFiles(directory) { // 1. 查找并收集文件 const { filePaths } await searchFiles(directory, { /* 配置 */ }); const rawFiles await collectFiles(filePaths, directory); // 2. 处理文件压缩/去注释等 const processedFiles await processFiles(rawFiles, { /* 配置 */ }); // 3. 统计 Token const tokenCounter new TokenCounter(o200k_base); await tokenCounter.init(); // 重要必须先初始化 // 4. 返回分析结果 return processedFiles.map((file) ({ path: file.path, tokens: tokenCounter.countTokens(file.content), })); }searchFiles按规则发现文件定义于 src/core/file/fileSearch.ts接收根目录与合并后的配置返回{ filePaths, emptyDirPaths }。它内部使用 globby 遍历文件同时应用内置默认忽略规则node_modules、.git、构建目录等来自defaultIgnoreList.gitignore、.ignore、.repomixignore及.git/info/exclude中的规则配置中的 include / ignore 自定义 glob 模式目录可读权限校验checkDirectoryPermissions。collectFiles读取文件内容定义于 src/core/file/fileCollect.ts以 50 路并发上限读取文件FILE_COLLECT_CONCURRENCY并受maxFileSize限制跳过超大文件返回{ rawFiles, skippedFiles }。processFiles内容变换对收集到的原始文件执行压缩Tree-sitter 解析、去注释、去空行、base64 截断等变换产出ProcessedFile[]其内部实现见 src/core/file/fileProcess.ts。TokenCounter精确 Token 统计TokenCounter类定义于 src/core/metrics/TokenCounter.ts内部基于gpt-tokenizer实现。关键细节构造函数只保存编码名称真正加载 BPE rank 数据的是init()方法内部为懒加载并缓存直接调用countTokens会抛出 TokenCounter not initialized. Call init() first. 错误。因此上面的示例特意补上了await tokenCounter.init()。此外计数时会把所有内容视为普通文本PLAIN_TEXT_OPTIONS避免特殊 token 干扰统计。支持的编码由TOKEN_ENCODINGS定义默认o200k_base对应 GPT-4o 系列。提示TokenCounter与searchFiles等函数对配置对象的类型要求是合并后的RepomixConfigMerged。若不想手写完整配置可先用loadFileConfig/mergeConfigs/defineConfig见 src/config/configLoad.ts 与 src/config/configSchema.ts加载并合并配置后再传入。打包Bundling注意事项当使用 Rolldown、esbuild 等工具把 repomix 打进自己的产物时有两类资源不能简单地随 JS 一并打包完整的可运行示例见 website/server/scripts/bundle.mjs必须保持 external 的依赖tinypool——它通过文件路径派生 worker 线程无法被静态打包。在 bundle 脚本中通过 Rolldown 的external: [tinypool]显式排除并另外生成一个最小化的 worker 入口 bundleworker.mjs供其加载。需要复制的 WASM 文件web-tree-sitter.wasm→ 复制到与打包后 JS 相同的目录代码压缩功能依赖 Tree-sitter加载时会按 JS 所在目录定位 WASMTree-sitter 各语言 WASM 文件 → 复制到REPOMIX_WASM_DIR环境变量指定的目录。后者的实现依据在 src/core/treeSitter/loadLanguage.tssetWasmBasePath()可编程设置 WASM 基础路径优先级从自定义路径回退到REPOMIX_WASM_DIR环境变量。在 bundle 脚本中web-tree-sitter.wasm被复制到dist-bundled/根目录而语言 WASM 文件被复制到dist-bundled/wasm/运行时对应REPOMIX_WASM_DIR。同时由于 worker 化执行入口还应导出unifiedWorkerHandler见 src/index.ts以便 worker 环境识别处理函数。真实世界示例repomix.com 的服务端Repomix 官网的在线打包远程仓库功能就是把 Repomix 作为库使用的真实案例。其服务端实现位于 website/server/src/domains/pack/remoteRepo.ts该路径是当前仓库中的实际位置核心流程为校验用户提供的仓库 URL仅允许公开 HTTPS 仓库并对 git 克隆做防重定向、限协议加固防止 SSRF生成缓存键并查询结果缓存命中则直接返回调用git clone --depth 1把仓库克隆到临时目录用buildUntrustedPackCliOptions构造不可信打包选项关闭安全扫描、跳过远端配置加载再调用从 src/index.ts 导出的runDefaultAction([tempDirPath], tempDirPath, cliOptions, progressCallback)完成打包读取生成的输出文件把packResult.totalFiles、totalCharacters、totalTokens以及按 Token 排序的 Top 文件等元数据组装成响应最后清理临时目录。这个示例演示了库使用的高级形态不依赖runCli的远程分支而是自己控制克隆、临时目录、缓存与清理把 Repomix 的打包能力当作服务端流水线的一个环节来编排。配套的测试见 website/server/tests/remoteRepo.test.ts。总结把 Repomix 当作 Node.js 库使用有清晰的三档选择runCli最省事适合快速获得与 CLI 一致的完整能力pack/runDefaultAction适合在保持官方打包流程的同时接管目录、进度回调与输出落盘searchFiles→collectFiles→processFilesTokenCounter则适合深度定制扫描、处理与统计逻辑。集成时记得两件易错事TokenCounter必须先init()用 Rolldown/esbuild 打包时要外部化tinypool并妥善复制web-tree-sitter.wasm与各语言 WASM 文件。【免费下载链接】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),仅供参考
返回列表