使用 JavaScript 腳本或是 tree 自動產出目錄結構吧!
| 2 min read
如果專案越來越龐大,是不是很難了解整個專案結構呢?
如果有可以自動產出結構的東西,就不用自己一層一層慢慢找了,真的非常方便,減少了手動寫文件出錯的機率,就跟 Swagger 一樣是懶人的福音^^
接下來簡單介紹兩種方法~
自己寫 JavaScript 腳本產出
使用 node 18 版本
// generateReadme.mjs
/**
* 生成專案目錄結構的 ProjectStructure.md 文件
* 使用 node v18.20.4 以上版本執行 (node -v 檢查版本)
* 使用方法:
* 1. 將此文件放在專案根目錄
* 2. 在終端機中執行指令: node generateReadme.mjs
* 3. 在專案根目錄下生成 ProjectStructure.md 文件
*/
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
function generateFolderStructure(dir, depth = 0) {
try {
const items = fs.readdirSync(dir)
let content = ''
for (const item of items) {
try {
const itemPath = path.join(dir, item)
const stat = fs.statSync(itemPath)
const indent = ' '.repeat(depth)
// 跳過指定的目錄和文件,可自行增減
const skipList = [
'node_modules',
'.git',
'.DS_Store',
'.vscode',
'build',
'dist',
'cpp',
'.husky',
'coverage',
'public',
]
if (skipList.includes(item)) {
continue
}
if (stat.isDirectory()) {
content += `${indent}- 📁 ${item}\n`
content += generateFolderStructure(itemPath, depth + 1)
} else {
content += `${indent}- 📄 ${item}\n`
}
} catch (itemError) {
console.error(`Error processing item ${item}:`, itemError)
}
}
return content
} catch (error) {
console.error(`Error reading directory ${dir}:`, error)
return ''
}
}
// 正確獲取當前檔案的目錄路徑
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const projectRoot = __dirname // 當前目錄作為根目錄
try {
const folderStructure = generateFolderStructure(projectRoot)
const readmeContent = `# Project Folder Structure\n\nGenerated on: ${new Date().toLocaleString()}\n\n${folderStructure}`
fs.writeFileSync('ProjectStructure.md', readmeContent)
console.log('✅ ProjectStructure.md generated successfully.')
} catch (error) {
console.error('❌ Error generating ProjectStructure.md:', error)
}
確認電腦有安裝 node ,這邊使用的是 node v18.20.4,然後執行
node generateReadme.mjs
產出來的 README.md 結構會像下面這樣
# Project Folder Structure
Generated on: 2/19/2025, 2:49:05 PM
- 📄 generateReadme.mjs
- 📄 index.html
- 📄 package.json
- 📄 ProjectStructure.md
- 📄 README.md
- 📁 src
- 📁 apis
- 📄 App.tsx
- 📁 components
- 📁 button
- 📄 init-button.tsx
- 📄 set-button.tsx
- 📁 chart
...Other files
如果想指定專案目錄,也可以直接修改 projectRoot
的值
const projectRoot = 'D:\vite-react' // 使用專案實際路徑
tree
Mac 系統直接安裝:
brew install tree
使用就是在專案直接
tree
如果只想要拿到 src 的結構
$ cd src // 切換到 src 的路徑
$ tree
其他指令可以看tree 文檔或是
tree --help
產出來的 README.md 結構會像下面這樣,有著酷酷的線條,是不是比較好閱讀 ^^
.
├── git
│ ├── command-line.md
│ ├── git-and-vim.md
│ └── server-ansyc-gitlab.md
├── javascript
│ ├── cookie-and-localstorage-and-sessionstorage.md
│ ├── debounce-and-memoize.md
│ ├── javascript-note.md
│ ├── lidemyOJ.md
│ ├── q1.md
│ └── upgrade-the-node-version-of-your-project.md
├── lidemy
│ ├── 2020-06-11.md
│ ├── 2020-06-12.md
│ ├── 2020-06-15.md
│ ├── 2020-06-16.md
├── others
│ ├── 11ty-blog.md
│ ├── 2022-work.md
│ ├── 2023-changed-your-name.md
│ └── tree.md
├── php
│ ├── php-change-unicode.md
│ ├── php-member-api.md
│ ├── php-member-cru.md
│ ├── php-member-crud.md
│ ├── php-member-list.md
│ ├── php-member-register.md
│ └── php-replace-str.md
├── posts.json
└── react
├── react-change-state.md
├── react-controller-component-and-uncontrolled.md
├── react-custom-hook.md
├── react-delete-todo.md
├── react-nextjs-mui.md
├── react-render.md
└── redux-toolkit-query.md
以後如果遇到交接或是需要解釋檔案位置的時候,就試試看使用這種方式吧^^
參考資料:
小花
Homebrew tree
[Mac] Homebrew 安裝 tree(樹狀資料夾目錄結構)
[Tools]使用 tree 自動生成目錄結構