如何优雅地导出 VS Code 项目目录结构

目录

[如何优雅地导出 VS Code 项目目录结构](#如何优雅地导出 VS Code 项目目录结构)

[一、哪些场景需要导出 VS Code 目录结构?](#一、哪些场景需要导出 VS Code 目录结构?)

[1、代码评审(Code Review)或分享架构设计](#1、代码评审(Code Review)或分享架构设计)

2、技术博客或者项目文档

3、做LLM结构化输入

二、实际可用的目录导出方法

[1、VS Code 插件:file-tree-generator / projecct-tree](#1、VS Code 插件:file-tree-generator / projecct-tree)

[2、使用树形命令 tree](#2、使用树形命令 tree)

[3、使用 Node.js 自写脚本导出目录结构](#3、使用 Node.js 自写脚本导出目录结构)

三、结语


作者:watermelo37

CSDN优质创作者、华为云云享专家、阿里云专家博主、腾讯云"创作之星"特邀作者、火山KOL、支付宝合作作者,全平台博客昵称watermelo37。

一个假装是giser的coder,做不只专注于业务逻辑的前端工程师,Java、Docker、Python、LLM均有涉猎。


温柔地对待温柔的人,包容的三观就是最大的温柔。


如何优雅地导出 VS Code 项目目录结构

在日常开发中,无论是前端 Vue 项目、后端 SpringBoot 工程,还是基于 Docker 的微服务架构,我们经常需要"导出项目目录结构"。具体有哪些常见场景,又要如何操作呢?

一、哪些场景需要导出 VS Code 目录结构?

仅我个人,就遇到过以下几类典型的场景:

1、代码评审(Code Review)或分享架构设计

当你想让其他开发者快速理解一个项目的模块拆分、业务边界、基础设施层次时,整棵项目树非常直观。一张清晰的目录结构比千言万语更有说服力。

比如 Vue 前端的 /components、/views、/composables组织方式;SpringBoot 的 /controller、/service、/domain 分层方式;Docker 多服务如何在 /deploy、/docker 中安排等等。都需要结合具体的项目目录来进行分享。

2、技术博客或者项目文档

仅我个人,经常在博文内容中分享具体的项目结构(或者局部结构),引导读者理解代码结构,来帮助读者快速理解场景、问题或者解决方案。

项目文档中也是一样,项目目录的作用与技术博文内容相似。

3、做LLM结构化输入

一些复杂的项目需求,经常需要给大语言模型输入项目结构作为参考,否则大模型哪怕给出正确的解决方案,也经常无法满足项目的实际需求。

这些场景都需要方便地导出 VS Code 的文件/目录结构。那么,具体怎么做呢?来看下面的几种方案。

二、实际可用的目录导出方法

以下所有方法我都实践过,并附上优缺点,让你能快速选到最适合的一种。

1、VS Code 插件:file-tree-generator / projecct-tree

这是 VS Code 生态中常用的方案,可以在编辑器中直接生成树形结构。

使用方式:

①在 VS Code 拓展中搜索 file-tree-generator,下载该拓展。

②右键要生成的目录,点击 Generate to Tree 即可生成对应的项目结构了:

这种方法简单易用,图形化操作,树结构清晰,能识别文件类型,但是输入目录过大时可能稍慢,不适合做自动化(CI、脚本)。

此外还有一些类似的拓展,比如 projecct-tree,这个拓展支持生成 Markdown 格式的项目目录,在某些场景使用起来更加方便。

2、使用树形命令 tree

这是最经典、最常用、最灵活的方法。要先安装:

macOS: brew install tree

Ubuntu: sudo apt install tree

Windows: 原生不支持,需要使用 Git Bash 的内置 tree

然后就可以使用命令:

bash 复制代码
tree -I "node_modules|dist|.git" -L 3 > tree.txt

这里的 -I:排除目录,-L:深度限制,其他的参数可以自行了解。

这个方法最灵活、最快,支持脚本,可大量自定义格式、过滤规则,但是需要终端操作并且默认输出格式比较丑。

3、使用 Node.js 自写脚本导出目录结构

这个方法适合自动生成目录树、做项目分析、自动文档化。但是需要配置node环境。

给个简单的示例脚本吧,将下面的代码保存为 tree.js 文件。

javascript 复制代码
const fs = require('fs');
const path = require('path');

function generateTree(dir, prefix = '') {
  const files = fs.readdirSync(dir);
  let result = '';

  files.forEach((file, idx) => {
    const isLast = idx === files.length - 1;
    const fullPath = path.join(dir, file);
    const stats = fs.statSync(fullPath);

    result += `${prefix}${isLast ? '└── ' : '├── '}${file}\n`;

    if (stats.isDirectory()) {
      result += generateTree(fullPath, `${prefix}${isLast ? '    ' : '│   '}`);
    }
  });

  return result;
}

console.log(generateTree(process.argv[2] || '.'));

然后在存放 tree.js 的文件夹中打开终端,运行下列命令就可以将当前文件夹的目录生成并导出到 tree.txt 文件中:

bash 复制代码
node tree.js > tree.txt

也可以手动传入具体的地址,比如加一个相对路径:

bash 复制代码
node tree.js ./src > src_tree.txt

这个方案优点是可完全定制(过滤、深度、输出格式等),可集成到 npm script,可在多项目中复用。缺点就是需要写脚本,相对更麻烦,而且效率一般不如 tree 命令高。

三、结语

导出 VS Code 目录结构看似是一个"小需求",但在实际工程、写文档、团队协作、LLM 助力开发等场景中,它是非常重要的"结构化表达工具"。在某些时刻一个简单的项目目录结构图,会大大增加沟通效率和展示效果。

只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

其他热门文章,请关注:

极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图

你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解

Web Worker:让前端飞起来的隐形引擎

测评:这B班上的值不值?在不同城市过上同等生活水平到底需要多少钱?

通过array.filter()实现数组的数据筛选、数据清洗和链式调用

DeepSeek:全栈开发者视角下的AI革命者

TreeSize:免费的磁盘清理与管理神器,解决C盘爆满的燃眉之急

通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能

高效工作流:用Mermaid绘制你的专属流程图;如何在Vue3中导入mermaid绘制流程图

通过MongoDB Atlas 实现语义搜索与 RAG------迈向AI的搜索机制

【前端实战】如何让用户回到上次阅读的位置?

前端实战:基于Vue3与免费满血版DeepSeek实现无限滚动+懒加载+瀑布流模块及优化策略

深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解

el-table实现动态数据的实时排序,一篇文章讲清楚elementui的表格排序功能

JavaScript双问号操作符(??)详解,解决使用 || 时因类型转换带来的问题

内存泄漏------海量数据背后隐藏的项目生产环境崩溃风险!如何避免内存泄漏

MutationObserver详解+案例------深入理解 JavaScript 中的 MutationObserver

JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、DOM操作等

相关推荐
MATLAB代码顾问1 分钟前
混合粒子群-模拟退火算法(HPSO-SA)求解作业车间调度问题——附MATLAB代码
算法·matlab·模拟退火算法
傻瓜搬砖人4 分钟前
SpringMVC的请求
java·前端·javascript·spring
Felven6 分钟前
C. Prefix Min and Suffix Max
算法
加农炮手Jinx6 分钟前
LeetCode 26. Remove Duplicates from Sorted Array 题解
算法·leetcode·力扣
加农炮手Jinx7 分钟前
LeetCode 88. Merge Sorted Array 题解
算法·leetcode·力扣
格林威7 分钟前
线阵工业相机:如何计算线阵相机的行频(Line Rate)?公式+实例
开发语言·人工智能·数码相机·算法·计算机视觉·工业相机·线阵相机
yueyue54310 分钟前
透过现象看本质:以fast_lio架构的整套算法的局部避障改为TEB算法为例深度探讨——如何成为一个合格的算法架构师?
算法·架构
梨花爱跨境10 分钟前
红人视频×A10算法:亚马逊转化率与流量闭环实战
算法
木易 士心11 分钟前
为什么 Promise 比 setTimeout 先执行?——JavaScript 事件循环与异步顺序完全指南
开发语言·javascript·ecmascript
阿Y加油吧14 分钟前
二刷 LeetCode:75. 颜色分类 & 31. 下一个排列 复盘笔记
笔记·算法·leetcode