tree-fs 批量创建文件

一、tree-fs 简介

tree-fs 是一个轻量级、零依赖的 Node.js 命令行工具,它的核心功能是将文本格式的目录树描述,直接转化为真实的文件夹和文件

1.1 设计初衷

如果你曾让 ChatGPT、Claude 或 DeepSeek 等 AI 帮你规划项目结构,AI 通常会输出类似这样的文本:

复制代码
my-app
├── src
│   ├── index.js
│   └── utils.js
└── README.md

然后你需要手动 逐个创建文件夹和文件------这项工作繁琐且容易出错。tree-fs 就是为了解决这个问题而生的,被誉为 AI 生成代码的 "Paste & Go" 接收器

1.2 核心特性

特性 说明
AI 兼容 自动剥离注释(如 # entry point),处理 Markdown 等非标准格式
确定性 同样的文本输入 → 完全相同的文件结构
安全 默认不会覆盖已存在的文件
智能识别 自动区分文件夹(如 v1.0/)和文件(如 v1.0.js
零依赖 安装仅需几秒钟

二、安装

2.1 使用 npx(无需安装,推荐)

bash 复制代码
npx tree-fs

这是最快捷的方式,适合临时使用。

2.2 全局安装

bash 复制代码
npm install -g tree-fs

安装后可直接使用 tree-fs 命令。

2.3 项目本地安装

bash 复制代码
npm install tree-fs

适合在项目脚本中调用。


三、使用方式

3.1 交互模式(最常用)

"粘贴即生成" 工作流,非常适合从 AI 对话中复制目录结构:

bash 复制代码
npx tree-fs
  1. 运行命令后,等待提示
  2. 粘贴你的目录树文本
  3. 按两次 Enter
  4. 完成!目录和文件已在当前目录生成

3.2 从文件读取

将目录树保存为 structure.txt,然后执行:

bash 复制代码
tree-fs structure.txt

3.3 Unix 管道输入

适合自动化场景:

bash 复制代码
# 从文件管道传入
cat structure.txt | tree-fs

# macOS 从剪贴板传入
pbpaste | tree-fs

# 直接 echo 传入
echo "src/\n  index.js" | tree-fs

3.4 编程调用(API)

在 Node.js 脚本中集成:

javascript 复制代码
const { parseTree, generateFS } = require("tree-fs");
const path = require("path");

const treeInput = `
backend-api
├── src
│   ├── controllers/
│   └── models/
└── .env
`;

// 1. 解析文本为 JSON AST
const tree = parseTree(treeInput);

// 2. 在目标目录生成文件
generateFS(tree, path.resolve(__dirname, "./output"));

console.log("目录结构创建完成!");

四、语法指南

tree-fs 设计得很"宽容",能处理各种"杂乱"的文本输入。

4.1 注释会被忽略

行末的 # 注释会被自动剥离:

复制代码
src
├── auth.js      # 处理 JWT 令牌
└── db.js        # 数据库连接逻辑

✅ 结果:创建 auth.jsdb.js,注释被忽略。

4.2 显式指定文件夹

如果名称看起来像文件但实际是文件夹(如版本号),在末尾加 /

复制代码
api
├── v1.5/        ← 创建为文件夹
└── v2.0/        ← 创建为文件夹

4.3 智能嵌套识别

如果一个条目下面有缩进的子项,即使名称带点(.),也会自动识别为文件夹:

复制代码
app
└── v2.5         ← 因为有子项,自动作为文件夹
    └── migrator.js

4.4 兼容多种树形符号

支持标准树字符、ASCII 艺术风格、项目符号等:

复制代码
project
- src
  + components
    > Header.jsx
* public
  - logo.png

4.5 无扩展名文件识别

常见的无扩展名配置文件会被正确识别为文件:

复制代码
Dockerfile
Makefile
LICENSE
Procfile
.gitignore
Jenkinsfile

4.6 标记与注释自动清理

文档中用于高亮特定文件的标记会被自动剥离:

复制代码
project
├── src/         ← 工作目录
├── utils.js     // 已弃用
└── .env         # 请勿提交

✅ 结果:创建文件夹 src、文件 utils.js.env,所有注释被忽略。

4.7 富文本与 Emoji 支持

工具会自动清理富文本格式和 Emoji。


五、实战示例

5.1 从 AI 对话生成项目结构

假设 ChatGPT 输出了以下目录结构:

复制代码
my-blog/
├── public/
│   └── index.html
├── src/
│   ├── components/
│   │   ├── Header.js
│   │   └── Footer.js
│   ├── styles/
│   │   └── main.css
│   └── app.js
├── package.json
└── README.md

操作步骤

bash 复制代码
npx tree-fs
# 粘贴上面的目录树
# 按两次 Enter

✅ 所有文件夹和空文件瞬间生成完毕。

5.2 使用注释标记

你可以在目录树中加入注释说明,不影响生成结果:

复制代码
project/
├── src/
│   ├── api/           # 接口层
│   │   └── user.js    # 用户相关接口
│   └── utils/         # 工具函数
│       └── common.js  # 通用工具
└── .env.example       # 环境变量示例

5.3 在 Node.js 脚本中使用

javascript 复制代码
const { parseTree, generateFS } = require("tree-fs");
const path = require("path");

const structure = `
admin-system/
├── public/
│   └── index.html
├── src/
│   ├── api/
│   │   └── request.js
│   ├── assets/
│   │   └── images/
│   ├── styles/
│   │   └── custom.css
│   └── views/
│       └── dashboard/
│           └── index.html
└── README.md
`;

const tree = parseTree(structure);
generateFS(tree, path.resolve(process.cwd(), "./my-admin"));

六、常见问题

Q1:生成时报错 ENOENT: no such file or directory

原因 :目录树文本中包含了通配符(如 *.png),工具无法展开。

解决方案

  • 移除通配符行,只保留目录
  • 或展开为具体文件名列表(如 iframe_1.pngiframe_2.png

Q2:如何防止覆盖已有文件?

tree-fs 默认不会覆盖已存在的文件,可以放心使用。

Q3:如何区分同名的文件夹和文件?

  • 文件夹:以 / 结尾(如 src/),或下方有缩进的子项
  • 文件:不以 / 结尾,且无子项

Q4:tree-fs 和系统 tree 命令有什么区别?

tree-fs 系统 tree
功能 生成目录和文件 展示目录结构
输入 目录树文本 已有目录路径
输出 真实的文件夹/文件 树形文本

简单说:tree 已有目录,tree-fs新目录。


七、总结

tree-fs 是一个"小而美"的工具,特别适合以下场景:

  1. AI 辅助开发:将 AI 生成的项目结构一键落地
  2. 项目模板快速初始化:提前写好目录树文本,随时生成
  3. 自动化脚本:通过 API 在 CI/CD 或其他工具中集成

它的核心价值在于:让你从"手动建文件夹"的重复劳动中解放出来,把精力放在真正的编码上

相关推荐
__zRainy__2 小时前
Node系列 · 数据库:单表查询
数据库·后端·mysql·node.js
薛定谔的算法4 小时前
NestJS:让 Node.js 后端告别「野路子」
后端·node.js·nestjs
zzx2006__5 小时前
node.js
node.js
GitLqr20 小时前
2026 Bun 全新姿态:从 Zig 到 Rust 的“暴力”重构与生态大爆发
rust·node.js·bun
赖龙3 天前
pnpm vs npm
前端·npm·node.js
烂蜻蜓3 天前
Node.js入门教程(三十一):Express 框架
node.js·express
小屁孩你滑稽掉了3 天前
prisma操作数据库的方法使用教程(简洁版)
数据库·node.js·prisma·fastify
__zRainy__3 天前
Node系列 · Node基础:https 模块
后端·网络协议·http·https·node.js
__zRainy__4 天前
Node.js Web 框架选型指南:从 Express 到 Hono 的全景对比
前端·node.js·express·koa·nestjs·egg·fastify