将指定目录下的文本文件统一导出到一个 Markdown 文件(export.md),并在导出的 Markdown 中附带文件层级结构和代码内容,方便整体阅读或进一步提交给 AI。
-
批量导出文本文件内容
支持遍历项目目录下的所有文本文件,将其内容收集并输出到单个 Markdown 文件export.md中。 -
文件层级结构预览
在export.md中先以 Markdown 无序列表的方式展示文件与文件夹的层级结构,并为文本文件自动生成跳转链接。 -
可自定义排除目录和文件
通过在脚本中配置EXCLUDE_PATHS、TEXT_FILE_EXTENSIONS等常量,可以忽略不需要导出的文件或文件夹。 -
自动生成锚点
通过给每个文件生成唯一的 HTMLanchor,实现从文件结构列表跳转到相应的具体代码段。
- Deno 1.0 及以上版本
脚本使用 Deno 的内置 API(Deno.readDir、Deno.readTextFile、Deno.writeTextFile 等),无需额外安装任何第三方库。
如果你不想手动下载 export.ts,可以直接使用 Deno 运行远程脚本:
deno run --allow-read --allow-write https://raw.githubusercontent.com/w0fv1/exprot.ts/refs/heads/main/export.ts
--allow-read允许脚本读取本地文件。--allow-write允许脚本在当前目录生成export.md文件。
- 该方法依赖于 GitHub 服务器,若文件 URL 变动或 GitHub 访问受限,可能会导致脚本无法运行。
- 建议先检查
export.ts代码内容,确保安全后再执行。
如果你希望本地运行 export.ts,可以按照以下步骤操作:
将 export.ts 文件放到你的项目根目录下,确保它与需导出的文件目录处在同一个层级(或者你想要遍历的目标目录下)。
在命令行(终端)中定位到脚本所在目录,执行以下命令:
deno run --allow-read --allow-write ./export.ts
- Windows 下请使用
.\export.ts,其他系统下请使用./export.ts。
脚本执行完成后,会在当前目录生成一个 export.md 文件,其中包含:
- 整个项目的文件层级结构(只针对未排除的文件夹和文件)。
- 所有文本文件的内容及其自动生成的锚点链接。
如果你希望更方便地运行 export.ts,可以使用 deno install 将其安装为全局命令。
deno install --global --allow-read --allow-write -n exp https://raw.githubusercontent.com/w0fv1/exprot.ts/refs/heads/main/export.ts
--global让 Deno 作为全局命令安装(Deno 1.38+ 版本需要)。--allow-read允许读取本地文件。--allow-write允许在当前目录生成export.md文件。-n exp指定命令名称为exp,之后可以直接运行exp代替完整的命令。
安装完成后,直接输入:
exp即可运行脚本,无需输入长 URL!
如果 exp 运行时报错 "command not found",请确保 Deno 安装目录在 PATH 环境变量中:
- Windows 用户:确保
C:\Users\你的用户名\.deno\bin在PATH变量中。 - macOS/Linux 用户:确保
~/.deno/bin在PATH变量中。
你可以手动添加 PATH:
export PATH="$HOME/.deno/bin:$PATH"或者 Windows 中执行:
$env:Path += ";C:\Users\你的用户名\.deno\bin"| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 直接运行远程脚本 | 临时使用,不想下载 | 快速、无需手动下载 | 依赖 GitHub |
| 克隆或复制脚本 | 本地开发、离线使用 | 适用于长期维护的项目 | 需要手动管理文件 |
| Deno Install 安装 | 经常使用该脚本 | 直接运行 exp 命令,最便捷 |
需要手动安装一次 |
你可以通过修改脚本顶部的一些常量自定义导出行为:
-
要处理的文本文件扩展名
在TEXT_FILE_EXTENSIONS中添加或删除所需的文件后缀:const TEXT_FILE_EXTENSIONS = [".ts", ".js", ".html", ".json", ".vue"];
如果你希望包含
.md文件或其他类型,只需将相应的扩展名添加到数组中即可。 -
排除的目录或文件
在EXCLUDE_PATHS中加入不想导出的文件夹或文件:const EXCLUDE_PATHS = [ "example", "node_modules", "out", "dist", "deno.lock", "package-lock.json", "export.ts", ];
凡是路径字符串包含列表中的任意元素,都会被跳过不导出。
-
语言高亮映射表
如果需要在导出的 Markdown 中添加语法高亮,可在languageMapping中对不同后缀配置对应的语言标识:const languageMapping: { [ext: string]: string } = { ".ts": "typescript", ".js": "javascript", ".html": "html", ".json": "json", ".vue": "vue", };
这样在 Markdown 中插入代码块时,会自动使用对应的语言标识进行高亮。
执行脚本后会生成一个 export.md 文件,其中包含:
-
文件层级结构
- 使用
# 文件层级结构作为标题,后跟一个 Markdown 无序列表,表示当前目录及其子目录中的所有文件。 - 对于符合
TEXT_FILE_EXTENSIONS的文件,会在无序列表中生成一个跳转链接。
- 使用
-
文件内容
- 使用
# 文件内容作为标题,后面依次展示各文本文件的内容。 - 每个文件块会以
### 文件名作为标题,后面是对应语言高亮的代码块或文本内容。 - 在每个文件的内容前都会插入一个
<a id="xxx"></a>形式的锚点,以便根据链接跳转到相应内容。
- 使用
示例结构(简化版):
> # 文件层级结构
>
> - main.ts
> - src
> - index.html
> - styles.css
>
> # 文件内容
>
> <a id="main-ts"></a>
> ### main.ts
> ```typescript
> // 这里是 main.ts 的内容
> ```
>
> <a id="src-index-html"></a>
> ### index.html
>
> ```html
> <!-- 这里是 index.html 的内容 -->
> ```
> ...-
脚本路径与目录层级
建议将脚本export.ts放在需要遍历的根目录下。如果你想要遍历其他目录,可以在脚本中修改currentDir或者将脚本移动到所需的根目录下。 -
脚本权限
Deno 默认采用安全策略,需要在运行时显式声明需要的权限(如读写、网络访问等)。本脚本需读取文件并写入文件,所以最少需要--allow-read与--allow-write。 -
大文件与递归
如果项目特别庞大,或者含有非常大的文件,生成的export.md也会相应变大;请注意处理大文件可能造成的性能或内存问题。
本项目遵循 MIT License。你可以自由复制、修改并发布本项目,但请务必保留原作者信息和 License 声明。
提示:如果对本脚本有任何疑问或改进建议,欢迎提交 PR 或 issue 一起讨论!
感谢你使用 export.ts!希望它能帮你快速整理项目中的文件,方便后续提交给 AI 或共享给他人阅读。祝你使用愉快!