📦 Repopack
Repopack 是一个强大的工具,可以将整个代码库打包成一个对 AI 友好的文件。
非常适合在将代码库提供给大语言模型(LLM)或其他 AI 工具(如 Claude、ChatGPT 和 Gemini)时使用。
🌟 特点
- AI 优化:以易于 AI 理解和处理的方式格式化您的代码库。
- 令牌计数:提供每个文件和整个代码库的令牌计数,这对于 LLM 上下文限制非常有用。
- 简单易用:只需一个命令即可打包整个代码库。
- 可定制:轻松配置要包含或排除的内容。
- Git 支持:自动遵循您的 .gitignore 文件。
- 安全聚焦:结合 Secretlint 进行强大的安全检查,以检测和预防敏感信息的包含。
🚀 快速开始
在您的项目目录中无需安装即可立即尝试 Repopack:
npx repopack
或者全局安装以便重复使用:
# 使用 npm 安装
npm install -g repopack
# 或者使用 yarn 安装
yarn global add repopack
# 然后在任何项目目录中运行
repopack
就是这样!Repopack 将在当前目录中生成一个 repopack-output.txt
文件,其中包含您的整个代码库,并且格式对 AI 友好。
📊 使用方法
要打包整个代码库:
repopack
要打包特定目录:
repopack path/to/directory
要使用全局模式打包特定文件或目录:
repopack --include "src/**/*.ts,**/*.md"
要排除特定文件或目录:
repopack --ignore "**/*.log,tmp/"
要初始化新的配置文件(repopack.config.json
):
repopack --init
一旦生成了打包文件,您可以将其与生成型 AI 工具(如 Claude、ChatGPT 和 Gemini)一起使用。
提示示例
使用 Repopack 生成打包文件后,您可以将其与 AI 工具一起使用,如 Claude、ChatGPT 和 Gemini。以下是一些示例提示,可以帮助您开始:
代码审查和重构
对于全面的代码审查和重构建议:
这个文件包含了我的整个代码库。请审查整体结构并提出任何改进或重构的建议,重点关注可维护性和可扩展性。
文档生成
生成项目文档:
根据这个文件中的代码库,请生成一个详细的 README.md,其中包括项目概述、主要功能、设置说明和使用示例。
测试用例生成
生成测试用例:
分析这个文件中的代码,并为主要函数和类建议一组全面的单元测试。包括极端情景和潜在的错误场景。
代码质量评估
评估代码质量和对最佳实践的遵循:
审查代码库是否符合编程最佳实践和行业标准。识别代码在可读性、可维护性和效率方面可以改进的地方。提出具体的修改建议,使代码符合最佳实践。
库概述
获取库的高级概述
这个文件包含了整个库的代码库。请提供一个全面的库概述,包括其主要用途、关键功能和整体架构。
根据您的具体需求和所使用的 AI 工具的能力,随意修改这些提示。
输出文件格式
Repopack 会生成一个包含代码库不同部分清晰分隔的文件。
为了增强 AI 理解,输出文件以面向 AI 的解释开头,使 AI 模型更容易理解打包存储库的上下文和结构。
纯文本格式(默认)
================================================================
REPOPACK OUTPUT FILE
================================================================
(元数据和使用 AI 的说明)
================================================================
代码库结构
================================================================
src/
cli/
cliOutput.ts
index.ts
config/
configLoader.ts
(...剩余目录)
================================================================
代码库文件
================================================================
================
文件:src/index.js
================
// 这里是文件内容
================
文件:src/utils.js
================
// 这里是文件内容
(...剩余文件)
XML 格式
要以 XML 格式生成输出,请使用 --style xml
选项:
repopack --style xml
XML 格式以分层方式结构化内容:
<summary>
(元数据和使用 AI 的说明)
</summary>
<repository_structure>
src/
cli/
cliOutput.ts
index.ts
(...剩余目录)
</repository_structure>
<repository_files>
<file path="src/index.js">
// 这里是文件内容
</file>
(...剩余文件)
</repository_files>
对于那些对 AI 上下文中的 XML 标签潜力感兴趣的人:
https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/use-xml-tags
当您的提示涉及多个组件(如上下文、说明和示例)时,XML 标签可以成为改变游戏规则的工具。它们帮助 Claude 更准确地解析您的提示,从而产生更高质量的输出。
这意味着从 Repopack 输出的 XML 不仅仅是不同的格式,而是将您的代码库提供给 AI 系统进行分析、代码审查或其他任务的潜在更有效方式。
命令行选项
-v, --version
:显示工具版本-o, --output <file>
:指定输出文件名称--include <patterns>
:包含模式列表(逗号分隔)-i, --ignore <patterns>
:附加忽略模式(逗号分隔)-c, --config <path>
:自定义配置文件路径--style <style>
:指定输出样式(plain
或xml
)--top-files-len <number>
:在摘要中显示的顶级文件数量--output-show-line-numbers
:在输出中显示行号--verbose
:启用详细日志记录
示例:
repopack -o custom-output.txt
repopack -i "*.log,tmp" -v
repopack -c ./custom-config.json
repopack --style xml
npx repopack src
更新 Repopack
要更新全局安装的 Repopack:
# 使用 npm
npm update -g repopack
# 使用 yarn
yarn global upgrade repopack
使用 npx repopack
通常更方便,因为它始终使用最新版本。
⚙️ 配置
在项目根目录创建 repopack.config.json
文件以进行自定义配置:
repopack --init
以下是配置选项说明:
选项 | 描述 | 默认 |
---|---|---|
output.filePath | 输出文件名称 | "repopack-output.txt" |
output.style | 输出样式(plain , xml ) | "plain" |
output.headerText | 文件头部包含的自定义文本 | null |
output.removeComments | 是否从支持的文件类型中移除注释 | false |
output.removeEmptyLines | 是否从输出中删除空行 | false |
output.showLineNumbers | 是否在输出中为每行添加行号 | false |
output.topFilesLength | 摘要中显示的顶级文件数目。如果设置为 0,则不显示摘要 | 5 |
include | 包含的文件模式(使用全局语法) | [] |
ignore.useGitignore | 是否使用项目的 .gitignore 文件中的模式 | true |
ignore.useDefaultPatterns | 是否使用默认忽略模式 | true |
ignore.customPatterns | 附加忽略模式(使用全局模式) | [] |
示例配置:
{
"output": {
"filePath": "repopack-output.xml",
"style": "xml",
"headerText": "自定义的打包文件头部信息。",
"removeComments": false,
"removeEmptyLines": false,
"showLineNumbers": false,
"topFilesLength": 5
},
"include": ["**/*"],
"ignore": {
"useGitignore": true,
"useDefaultPatterns": true,
"customPatterns": ["additional-folder", "**/*.log"]
}
}
包含和忽略
包含模式
Repopack 现在支持使用全局模式指定要包含的文件。这使得文件选择更加灵活和强大:
- 使用
**/*.js
包含任意目录中的所有 JavaScript 文件 - 使用
src/**/*
包含src
目录及其子目录中的所有文件 - 结合多个模式,如
["src/**/*.js", "**/*.md"]
,可以包含src
中的 JavaScript 文件和所有 Markdown 文件
忽略模式
Repopack 提供了多种方法来设置忽略模式,以在打包过程中排除特定文件或目录:
- .gitignore:默认情况下,使用您项目的 .gitignore 文件中列出的模式。此功能可以通过
ignore.useGitignore
设置进行控制。 - 默认模式:Repopack 包含一份默认的常见忽略文件和目录列表(例如 node_modules、.git、二进制文件)。此功能可以通过
ignore.useDefaultPatterns
设置进行控制。请参见 defaultIgnore.ts 了解更多详情。 - .repopackignore:您可以在项目根目录创建一个
.repopackignore
文件,以定义 Repopack 特定的忽略模式。此文件的格式与 .gitignore 相同。 - 自定义模式:可以使用配置文件中的
ignore.customPatterns
选项指定附加忽略模式。您可以通过命令行选项-i, --ignore
覆盖此设置。
优先级顺序(从高到低):
- 自定义模式
ignore.customPatterns
.repopackignore
.gitignore
(如果ignore.useGitignore
为真)- 默认模式(如果
ignore.useDefaultPatterns
为真)
此方法允许您基于项目需求灵活配置文件排除。在生成的打包文件时,它有助于优化文件大小,确保排除安全敏感文件和大型二进制文件,同时防止敏感信息泄漏。
注意:默认情况下,二进制文件不会包含在打包输出中,但它们的路径会列在输出文件的“代码库结构”部分。这提供了代码库结构的完整概述,同时保持打包文件高效且基于文本。
注释移除
当 output.removeComments
设置为 true
时,Repopack 将尝试从支持的文件类型中移除注释。此功能可以帮助减少输出文件的大小,并专注于重要的代码内容。
支持的语言包括: HTML、CSS、JavaScript、TypeScript、Vue、Svelte、Python、PHP、Ruby、C、C#、Java、Go、Rust、Swift、Kotlin、Dart、Shell 和 YAML。
注意:注释移除过程是保守的,以避免意外删除代码。在复杂情况下,可能会保留一些注释。
🔍 安全检查
Repopack 包含一个使用 Secretlint 进行安全检查的功能,以检测您文件中可能存在的敏感信息。此功能有助于在共享打包代码库之前识别潜在的安全风险。
在打包过程完成后,安全检查结果将显示在 CLI 输出中。如果检测到任何可疑文件,您将看到这些文件的列表以及警告消息。
示例输出:
🔍 安全检查:
──────────────────
检测到 2 个可疑文件:
1. src/utils/test.txt
2. tests/utils/secretLintUtils.test.ts
请检查这些文件,是否包含潜在的敏感信息。
📜 许可证
MIT