С легкостью создавайте файловые деревья для ваших README
Когда вы работаете над проектом, может быть полезно иметь визуальное представление структуры файла. Это особенно актуально при работе над большими проектами с большим количеством файлов и папок. Дерево файлов может помочь вам быстро находить файлы и перемещаться по проекту, а также общаться с вашей командой.
В этой статье мы рассмотрим, как создать скрипт, генерирующий дерево файлов для README вашего проекта. Мы также расскажем, как исключить файлы и папки из дерева файлов и как связать сценарий с командой, чтобы вы могли легко создать дерево файлов из любого каталога.
Создание скрипта
Мы будем использовать Node.js для создания нашего скрипта. Вот код:
const fs = require('fs'); const path = require('path'); const outputFileName = 'directory_structure.md'; const excludedItems = [ '.DS_Store', '.git', 'node_modules', '.vscode', '.idea', '__pycache__', '.gitignore', '.npmignore', '.eslintignore', ]; function getDirectoryStructure(dir, level = 0, parentIsLast = []) { let structure = ''; const files = fs.readdirSync(dir).filter((file) => !excludedItems.includes(file)); files.forEach((file, index) => { const fullPath = path.join(dir, file); const stats = fs.statSync(fullPath); const isLastItem = index === files.length - 1; const prefix = parentIsLast.map((isLast) => (isLast ? ' ' : '│ ')).join(''); const line = isLastItem ? '└── ' : '├── '; if (stats.isDirectory()) { structure += `${prefix}${line}${file}\n`; structure += getDirectoryStructure(fullPath, level + 1, [...parentIsLast, isLastItem]); } else { structure += `${prefix}${line}${file}\n`; } }); return structure; } function writeDirectoryStructureToFile() { const currentDir = process.cwd(); const structure = getDirectoryStructure(currentDir); fs.writeFileSync(outputFileName, "```\n" + structure + "```\n"); console.log(`Directory structure written to ${outputFileName}`); } writeDirectoryStructureToFile();
Давайте разберемся, что происходит
Во-первых, нам нужны модули fs
и path
. Мы будем использовать эти модули для чтения файловой системы и управления путями к файлам.
Затем мы определяем две переменные: outputFileName
и excludedItems
.
outputFileName
— это имя файла, в который мы будем записывать дерево файлов. В данном случае мы используем directory_structure.md
.
excludedItems
— это массив имен файлов и папок, которые мы хотим исключить из дерева файлов. В этом случае мы исключаем общие файлы и папки, которые не хотим включать в дерево файлов.
Далее мы определяем функцию с именем getDirectoryStructure
. Эта функция принимает путь к каталогу, уровень (который мы будем использовать для определения уровня отступа) и массив с именем parentIsLast
, который мы будем использовать, чтобы определить, является ли папка последним элементом в своей родительской папке.
Внутри функции мы сначала инициализируем пустую строку с именем structure
.
Затем мы используем модуль fs
для чтения содержимого каталога и фильтрации любых файлов или папок, которые находятся в массиве excludedItems
.
Затем мы просматриваем каждый файл или папку и получаем их полный путь и статистику (используя fs.statSync
).
Мы определяем, является ли элемент последним в своей родительской папке, проверяя его индекс в массиве files
.
Затем мы используем массив parentIsLast
, чтобы определить соответствующий уровень отступа, и переменную `isLastItem`, чтобы определить, должны ли мы использовать строку └──
или ├──
.
Если элемент является папкой, мы рекурсивно вызываем функцию getDirectoryStructure
и добавляем ее содержимое в строку structure
.
Наконец, мы возвращаем строку structure
.
Затем мы определяем функцию с именем writeDirectoryStructureToFile
. Эта функция получает текущий рабочий каталог, используя process.cwd()
, и вызывает getDirectoryStructure
с этим каталогом.
Затем мы записываем полученную строку structure
в файл outputFileName
, используя fs.writeFileSync
.
Наконец, мы записываем в консоль сообщение о том, что дерево файлов было записано в файл.
Исключение файлов и папок
Вы можете исключить определенные файлы или папки из дерева файлов. Для этого просто добавьте имя файла или папки в массив excludedItems
.
Например, если вы хотите исключить папку с именем logs
, вы должны добавить “logs”
к массиву excludedItems
следующим образом:
const excludedItems = [ '.DS_Store', '.git', 'node_modules', '.vscode', '.idea', '__pycache__', '.gitignore', '.npmignore', '.eslintignore', 'logs', // Add your excluded file or folder here ];
Привязать скрипт к глобальной команде
Время для веселой части! Чтобы сделать этот скрипт более удобным в использовании, мы можем привязать его к глобальной команде, которую можно запускать из любого каталога. Для этого выполните следующие действия:
- Сохраните сценарий из предыдущего раздела в файл с именем
generate_file_tree.js
. Вы можете сохранить этот файл в удобном месте, например, в домашнем каталоге или в папке скриптов. - Откройте терминал (или командную строку в Windows) и перейдите в каталог, в котором вы сохранили файл
generate_file_tree.js
. - Выполните следующую команду, чтобы сделать скрипт исполняемым:
chmod +x generate_file_tree.js
Примечание. Этот шаг не требуется в Windows.
4. Создайте символическую ссылку на сценарий в каталоге вашей системы PATH
. Например, вы можете использовать /usr/local/bin
в macOS и Linux или C:\Windows\System32
в Windows.
В macOS и Linux выполните следующую команду:
sudo ln -s "$(pwd)/generate_file_tree.js" /usr/local/bin/generate-file-tree
В Windows выполните следующую команду в командной строке администратора:
mklink "C:\Windows\System32\generate-file-tree.js" "Full\Path\To\generate_file_tree.js"
Замените Full\Path\To
фактическим путем к файлу generate_file_tree.js
.
5. Теперь вы можете использовать команду generate-file-tree
из любого каталога, чтобы сгенерировать дерево файлов для этого каталога. Дерево файлов будет сохранено в файл с именем directory_structure.md
в текущем каталоге.
Чтобы запустить команду, просто введите generate-file-tree
в терминале (или в командной строке Windows) и нажмите Enter.
generate-file-tree
Консоль отобразит сообщение о том, что структура каталогов была записана в файл `directory_structure.md`.
Вот и все! Теперь у вас есть глобальная команда, которую вы можете запустить из любого каталога, чтобы сгенерировать дерево файлов для README вашего проекта. Не забудьте обновить массив excludedItems
в скрипте, если вам нужно исключить дополнительные файлы или папки.
Если вы нашли эту статью полезной или интересной, подпишитесь на меня! Мне нравится учиться публично и делиться своими выводами несколько раз в неделю.