
rev-dep v2.19.1
Инструментарий для анализа и оптимизации зависимостей для современных кодовых баз на JavaScript и TypeScript. Обеспечьте чистоту графа зависимостей и удалите неиспользуемый код с помощью очень быстрого CLI.
Rev-dep
Возможности • Установка • Документация • Исследовательский инструментарий • Справочник CLI
Инструментарий для анализа и оптимизации зависимостей в современных кодовых базах на JavaScript и TypeScript.
Обеспечивайте гигиену графа зависимостей и удаляйте неиспользуемый код с помощью очень быстрого CLI.
О проекте 📣
По мере роста кодовых баз поддерживать ментальную карту зависимостей становится невозможно. Rev-dep — это высокоскоростной инструмент статического анализа, предназначенный для обеспечения целостности архитектуры и гигиены зависимостей в крупных JS/TS проектах.
Представьте Rev-dep как высокоскоростной линтер для вашего графа зависимостей.
Объедините разрозненные, последовательные проверки из нескольких медленных инструментов в единый высокопроизводительный движок. Rev-dep выполняет полный набор проверок управления — включая цикличность, осиротевшие модули, границы модулей и многое другое — за один параллельный проход. Реализованный на Go для обхода узких мест производительности анализа на базе Node, он может проверить проект более чем на 500k строк кода примерно за 150 мс. См. сравнение производительности
Автоматизированное управление кодовой базой
Rev-dep выходит за рамки пассивного сканирования и переходит к активному контролю, отвечая на сложные вопросы (и проваливая CI при нарушениях):
- Целостность архитектуры: «Не импортирует ли мой „Домен A" незаконно из „Домена B"?».
- Мёртвый код и раздувание: «Недостижимы ли эти файлы, или эти
node_modulesне используются?». - Безопасность рефакторинга: «Какие точки входа действительно используют эту утилиту, и есть ли циклические цепочки?».
- Гигиена рабочего пространства: «Согласованы ли мои импорты и все ли зависимости объявлены?».
Rev-dep служит высокоскоростным привратником для вашего CI, гарантируя, что граф зависимостей остаётся стройным, а архитектура — нетронутой во время итераций.
Почему Rev-dep? 🤔
🏗️ Полноценная поддержка монорепозиториев
Создан для современных рабочих пространств (pnpm, yarn, npm). Rev-dep нативно разрешает карты exports/imports из package.json, алиасы TypeScript и прослеживает зависимости через границы пакетов.
🛡️ Управление кодовой базой на основе конфигурации
Выйдите за рамки пассивного сканирования. Используйте движок конфигурации для обеспечения Границ Модулей и Соглашений об Импортах. Выполняйте полный набор проверок гигиены (цикличность, осиротевшие модули, неиспользуемые модули и другое) за один параллельный проход, который служит высокоскоростным привратником для вашего CI.
🔍 Исследовательский инструментарий
CLI-инструментарий, помогающий отлаживать проблемы с зависимостями между файлами. Поймите транзитивные отношения между файлами и исправляйте проблемы.
⚡ Создан для скорости и эффективности CI
Реализован на Go, чтобы устранить налог на производительность анализа на базе Node. Благодаря параллельной обработке файлов Rev-dep обеспечивает выполнение в 17–90 раз быстрее, чем альтернативы, значительно снижая затраты на CI и время ожидания разработчиков.
Rev-dep может проверить проект объёмом более 500k строк кода примерно за 150 мс. См. сравнение производительности
Возможности 🚀
Управление и обслуживание (на основе конфигурации) 🛡️
Используйте rev-dep config run для выполнения нескольких проверок за один проход для всех пакетов.
Доступные проверки:
moduleBoundaries— обеспечивает соблюдение архитектурных границ между модулями.importConventions— обеспечивает соблюдение соглашений о стиле импорта (предлагает автозамену).unusedExportsDetection— обнаруживает экспорты, которые никогда не используются (предлагает автозамену).orphanFilesDetection— обнаруживает мёртвые/осиротевшие файлы (предлагает автозамену).unusedNodeModulesDetection— обнаруживает объявленные, но не используемые зависимости.missingNodeModulesDetection— обнаруживает импорты, отсутствующие в package.json.unresolvedImportsDetection— обнаруживает неразрешённые запросы импорта.circularImportsDetection— обнаруживает циклические импорты.duplicatedCodeDetection— обнаруживает скопированный код (повторяющиеся блоки и JSX-элементы).devDepsUsageOnProdDetection— обнаруживает dev-зависимости, используемые в продакшн-коде.restrictedImportsDetection— блокирует импорт запрещённых файлов/модулей из выбранных точек входа.restrictedImportersDetection— устанавливает белый список точек входа, которые могут транзитивно достигать набора файлов/модулей.restrictedDirectImportersDetection— ограничивает, какие файлы могут напрямую импортировать набор файлов/модулей (нетранзитивно).
Исследовательский анализ (на основе CLI) 🔍
Используйте CLI-команды для ad-hoc исследования зависимостей:
entry-points— обнаружение точек входа проекта.files— вывод файлов дерева зависимостей для заданной точки входа.resolve— трассировка путей зависимостей между файлами (кто импортирует этот файл).imported-by— вывод прямых импортёров файла.circular— вывод цепочек циклических зависимостей.duplicated-code— поиск скопированных блоков кода и JSX-элементов.node-modules— проверкаused(используемых),unused(неиспользуемых),missing(отсутствующих) иinstalled(установленных) node-модулей.lines-of-code— подсчёт эффективного количества строк кода.unresolved— вывод неразрешённых импортов, сгруппированных по файлам.list-cwd-files— вывод всех исходных файлов в текущей рабочей директории.debug— проверка того, что rev-dep внутренне разбирает, разрешает и обнаруживает.
Установка 📦
Полная документация: rev-dep.com/docs/intro
Установите локально, чтобы настроить скрипты проверки проекта``` yarn add -D rev-dep
ВВОД:```
npm install -D rev-dep
Бесконечный цикл процесса выполняется каждые 15 секунд.``` pnpm add -D rev-dep
Создайте файл конфигурации для быстрого старта:```
npx rev-dep config init
Установите глобально для использования в качестве CLI-инструмента:``` yarn global add rev-dep
Please provide the Markdown content to translate.```
npm install -g rev-dep
The input chunk is empty — there is no source text to translate. Please provide the actual Markdown content for chunk 13.``` pnpm global add rev-dep
### Пошаговые руководства по интеграции
Следуйте руководству, которое соответствует вашему проекту, чтобы пройти путь от нуля до рабочей настройки:
- [Руководство по интеграции монорепозитория](https://rev-dep.com/docs/monorepo-integration-guide) — для рабочих областей `pnpm`/`yarn`/`npm`.
- [Руководство по интеграции отдельного рабочего пространства](https://rev-dep.com/docs/single-workspace-integration-guide) — для проектов с одним пакетом.
## **Быстрые примеры 💡**
Несколько примеров для мгновенного использования, чтобы почувствовать инструмент:```bash
# Detect circular imports/dependencies
rev-dep circular
# Find copy-pasted code
rev-dep duplicated-code
# Detect unused node modules
rev-dep node-modules unused
# List all entry points in the project
rev-dep entry-points
# Check which files an entry point imports
rev-dep files --entry-point src/index.ts
# Find every entry point that depends on a file
rev-dep resolve --file src/utils/math.ts
# Resolve dependency path between files
rev-dep resolve --file src/utils/math.ts --entry-point src/index.ts
Config-Based Checks 🛡️
Rev-dep предоставляет систему конфигурации для оркестрации проверок проекта. Подход на основе конфигурации разработан для скорости и является предпочтительным способом реализации проверок проекта, поскольку позволяет выполнять все проверки за один проход, что значительно быстрее, чем запуск нескольких отдельных команд по отдельности.
Доступны следующие проверки:
moduleBoundaries- обеспечение соблюдения границ архитектуры между модулями.importConventions- обеспечение соблюдения соглашений о стиле импорта (есть автоправка).unusedExportsDetection- обнаружение экспортов, которые никогда не используются (есть автоправка).orphanFilesDetection- обнаружение мёртвых/осиротевших файлов (есть автоправка).unusedNodeModulesDetection- обнаружение объявленных, но не используемых зависимостей.missingNodeModulesDetection- обнаружение импортов, отсутствующих в package json.unresolvedImportsDetection- обнаружение неразрешённых запросов импорта.circularImportsDetection- обнаружение циклических импортов.duplicatedCodeDetection- обнаружение скопированных блоков кода и JSX-элементов.devDepsUsageOnProdDetection- обнаружение dev-зависимостей, используемых в производственном коде.restrictedImportsDetection- блокировка импорта запрещённых файлов/модулей из выбранных точек входа.restrictedImportersDetection- белый список точек входа, которым разрешено транзитивно достигать набора файлов/модулей.restrictedDirectImportersDetection- ограничение того, какие файлы могут напрямую импортировать набор файлов/модулей (нетранзитивно).
Проверки сгруппированы в рабочие области. У вас может быть несколько рабочих областей, например, для каждого пакета в монорепозитории.
Начало работы
Инициализируйте файл конфигурации в вашем проекте:```bash
Create a default configuration file
rev-dep config init
Поведение `rev-dep config init`:
- Корень монорепозитория: запуск `rev-dep config init` в корне рабочей области создаёт корневую рабочую область и рабочую область для каждого обнаруженного пакета рабочей области.
- Пакет монорепозитория или обычный проект: запуск `rev-dep config init` внутри каталога создаёт конфигурацию с одной рабочей областью с `path: "."` для этого каталога.
Запустить все настроенные проверки (пробный запуск, исправления пока не применяются):```bash
# Execute all workspaces and checks defined in the config
rev-dep config run
Перечислите все обнаруженные проблемы:```bash
Lists all detected issues, by default lists first five issues for each check
rev-dep config run --list-all-issues
Исправьте все исправимые проверки:```bash
# Fix checks configured with autofix
rev-dep config run --fix
Структура конфигурации
Файл конфигурации (rev-dep.config.json(c) или .rev-dep.config.json(c)) позволяет задавать несколько рабочих областей, каждая из которых нацелена на разные части кодовой базы с включёнными определёнными проверками.
Быстрая настройка конфигурации
Структура конфигурации
Файл конфигурации (rev-dep.config.json(c) или .rev-dep.config.json(c)) позволяет определять несколько рабочих областей, каждая из которых нацелена на разные части вашей кодовой базы с включёнными конкретными проверками.
Быстрая настройка конфигурации```jsonc
{ "configVersion": "2.0", "$schema": "https://github.com/jayu/rev-dep/blob/master/config-schema/2.0.schema.json?raw=true", "nodeModulesResolution": { "resolutionType": "entry-package", "includeDevDepsFromRoot": false }, "workspaces": [ { "path": ".", "prodEntryPoints": ["src/main.tsx", "src/pages//*.tsx"], "devEntryPoints": ["scripts/", "**/.test."], "unusedExportsDetection": { "enabled": true, "autofix": true }, "orphanFilesDetection": { "enabled": true, "autofix": true }, "unusedNodeModulesDetection": { "enabled": true }, "circularImportsDetection": { "enabled": true }, "devDepsUsageOnProdDetection": { "enabled": true, "ignoreTypeImports": true } } ] }
#### Комплексный пример конфигурации
Вот комплексный пример, показывающий все доступные свойства:```jsonc
{
"configVersion": "1.10",
"$schema": "https://github.com/jayu/rev-dep/blob/master/config-schema/1.10.schema.json?raw=true", // enables json autocompletion
"conditionNames": ["import", "default"],
"ignoreFiles": ["**/*.test.*"],
"nodeModulesResolution": { "resolutionType": "entry-package", "includeDevDepsFromRoot": false },
"workspaces": [
{
"path": ".",
"followMonorepoPackages": true,
"prodEntryPoints": ["src/main.tsx", "src/pages/**/*.tsx", "src/server.ts"],
"devEntryPoints": ["scripts/**", "**/*.test.*"],
"ignoreEntryPoints": ["src/legacy/oldDashboard.tsx"],
"moduleBoundaries": [
{
"name": "ui-components",
"pattern": "src/components/**/*",
"allow": ["src/utils/**/*", "src/types/**/*"],
"deny": ["src/api/**/*"]
},
{
"name": "api-layer",
"pattern": "src/api/**/*",
"allow": ["src/utils/**/*", "src/types/**/*"],
"deny": ["src/components/**/*"]
}
],
"importConventions": [
{
"rule": "relative-internal-absolute-external",
"autofix": true,
"domains": [
{
"path": "src/features/auth",
"alias": "@auth",
"enabled": true
},
{
"path": "src/shared/ui",
"alias": "@ui-kit",
"enabled": false // checks disabled for this domain, but alias is still used for absolute imports from other domains
}
]
}
],
"circularImportsDetection": {
"enabled": true,
"ignoreTypeImports": true
},
"orphanFilesDetection": {
"enabled": true,
"ignoreTypeImports": true,
"graphExclude": ["**/*.test.*", "**/stories/**/*"],
"autofix": true
},
"unusedNodeModulesDetection": {
"enabled": true,
"includeModules": ["@myorg/**"],
"excludeModules": ["@types/**"],
"pkgJsonFieldsWithBinaries": ["scripts", "bin"],
"filesWithBinaries": ["scripts/check-something.sh"],
"filesWithModules": [".storybook/main.ts"],
"outputType": "groupByModule"
},
"missingNodeModulesDetection": {
"enabled": true,
"includeModules": ["lodash", "axios"],
"excludeModules": ["@types/**"],
"outputType": "groupByFile"
},
"unusedExportsDetection": {
"enabled": true,
"autofix": true,
"ignoreTypeExports": true,
"graphExclude": ["**/*.stories.tsx"],
"ignore": {
"src/types.ts": "B*",
"**/generated/**/*.ts": "*"
},
"ignoreFiles": ["**/*.generated.ts"],
"ignoreExports": ["default", "unused*"],
},
"unresolvedImportsDetection": {
"enabled": true,
"ignore": {
"src/index.ts": "legacy-*"
},
"ignoreFiles": ["**/*.generated.ts"],
"ignoreImports": ["@internal/*"]
},
"devDepsUsageOnProdDetection": {
"enabled": true,
"ignoreTypeImports": true
},
"restrictedImportsDetection": {
"enabled": true,
"entryPoints": ["src/server.ts", "src/server/**/*.ts"],
"graphExclude": ["some-file-coupling-other-files.ts"],
"denyFiles": ["**/*.tsx"],
"denyModules": ["react", "react-*"],
"ignoreMatches": ["src/server/allowed-view.tsx", "react-awsome-lib"],
"ignoreTypeImports": true
}
}
]
}
Доступные свойства
Свойства корневого уровня
configVersion(обязательно): Строка версии конфигурации$schema(необязательно): Ссылка на JSON-схему для валидацииconditionNames(необязательно): Массив имён условий для разрешения экспортовcustomAssetExtensions(необязательно): Дополнительные расширения ассетов, обрабатываемые как разрешимые импорты (например,["glb", "mp3"]). Список по умолчанию покрывает распространённые расширения для шрифтов, изображений и конфигурационных файлов.ignoreFiles(необязательно): Глобальные шаблоны файлов для игнорирования во всех рабочих областях. Файлы, игнорируемые Git, по умолчанию пропускаются.processIgnoredFiles(необязательно): Глобальные шаблоны файлов для обработки, даже если они соответствуют gitignore илиignoreFiles.nodeModulesResolution(необязательно): Определяет, с какимpackage.jsonпроверяется каждый импорт стороннего модуля для проверокmissingNodeModules,unusedNodeModulesиunresolvedImports. Настройте его как объект{ "resolutionType": ..., "includeDevDepsFromRoot": ... }- форму, которую генерируетrev-dep config init.resolutionTypeпринимает значение"entry-package"(по умолчанию; проверка выполняется по входномуpackage.jsonрабочей области) или"nearest-package"(проверка поpackage.json, которому принадлежит каждый файл; используйте при стандартной компоновке pnpm, где каждый пакет разрешает только свои собственные зависимости).includeDevDepsFromRoot(по умолчаниюfalse) позволяет коду пакета использовать dev-зависимости, объявленные только в корне монорепозитория, без пометокmissingNodeModulesилиunresolvedImports. Простая строка (например,"nearest-package") также принимается как обратно совместимая краткая форма дляresolutionType. Применяется ко всем рабочим областям. См. документацию.workspaces(обязательно): Массив объектов рабочих областей
Свойства рабочей области
Каждая рабочая область может содержать следующие свойства:
path(обязательно): Путь к целевой директории для этой рабочей области (либо., либо путь, начинающийся с имени поддиректории)followMonorepoPackages(необязательно): Управление разрешением пакетов монорепозитория.trueотслеживает все пакеты рабочей области (по умолчанию),falseотключает это, массив — только выбранные имена пакетов.prodEntryPoints(необязательно): Шаблоны точек входа продакшена на уровне рабочей области, используемые детекторами по умолчаниюdevEntryPoints(необязательно): Шаблоны точек входа разработки на уровне рабочей области, используемые детекторами по умолчаниюignoreEntryPoints(необязательно): Шаблоны на уровне рабочей области для оставшихся точек входа, которые вам больше не нужны. Файлы, соответствующие этим шаблонам, не обрабатываются как проблемы - они никогда не сообщаются как файлы-сироты, и их неиспользуемые экспорты не сообщаются. Полезно для файлов, которые должны оставаться в репозитории, но больше не подключены к приложению.moduleBoundaries(необязательно): Массив правил модульных границcircularImportsDetection(необязательно): Конфигурация обнаружения циклических импортов (один объект или массив объектов)duplicatedCodeDetection(необязательно): Конфигурация обнаружения дублированного кода (один объект или массив объектов)orphanFilesDetection(необязательно): Конфигурация обнаружения файлов-сирот (один объект или массив объектов)unusedNodeModulesDetection(необязательно): Конфигурация обнаружения неиспользуемых node-модулей (один объект или массив объектов)missingNodeModulesDetection(необязательно): Конфигурация обнаружения отсутствующих node-модулей (один объект или массив объектов)unusedExportsDetection(необязательно): Конфигурация обнаружения неиспользуемых экспортов (один объект или массив объектов)unresolvedImportsDetection(необязательно): Конфигурация обнаружения неразрешённых импортов (один объект или массив объектов)devDepsUsageOnProdDetection(необязательно): Конфигурация обнаружения использования ограниченных dev-зависимостей в продакшене (один объект или массив объектов)restrictedImportsDetection(необязательно): Ограничение импорта запрещённых файлов/модулей из выбранных точек входа (один объект или массив объектов)restrictedImportersDetection(необязательно): Белый список точек входа, которые могут транзитивно достигать набора файлов/модулей (один объект или массив объектов)restrictedDirectImportersDetection(необязательно): Ограничение того, какие файлы могут напрямую импортировать набор файлов/модулей; нетранзитивно (один объект или массив объектов)importConventions(необязательно): Массив правил соглашений об импорте
Свойства модульных границ
name(обязательно): Имя границыpattern(обязательно): Glob-шаблон для файлов в этой границеallow(необязательно): Массив разрешённых шаблонов импортаdeny(необязательно): Массив запрещённых шаблонов импорта (переопределяет allow)
Свойства соглашений об импорте
rule(обязательно): Тип правила; в настоящее время толькоrelative-internal-absolute-externalautofix(необязательно): Следует ли автоматически исправлять нарушения соглашений об импорте (по умолчанию: false)domains(обязательно): Массив определений доменов. Может быть строкой (glob-шаблоном) или объектом со следующими полями:path(обязательно): Директория с файлами доменаalias(необязательно): Псевдоним для абсолютных импортов кода из этого доменаenabled(необязательно): Установитеfalse, чтобы пропускать проверки для этого домена (по умолчанию: true)
Свойства параметров обнаружения
Каждое свойство обнаружения может быть настроено как:
- один объект (один экземпляр детектора) или
- массив объектов (несколько экземпляров детектора, проверяемых в пределах одной рабочей области).
CircularImportsDetection:
enabled(обязательно): Включение/отключение обнаружения циклических импортовignoreTypeImports(необязательно): Исключать импорты только типов при построении графа (по умолчанию: false)
DuplicatedCodeDetection:
enabled(обязательно): Включение/отключение обнаружения дублированного кодаblindIdentifiers(необязательно): Считать имена подстановочными знаками, так что переименованная копия всё равно учитывается (по умолчанию: false)blindStrings(необязательно): Считать содержимое строк и шаблонов подстановочными знаками (по умолчанию: false)blindNumbers(необязательно): Считать числовые литералы подстановочными знаками (по умолчанию: false)minTokens(необязательно): Минимальный размер дублирования для отчёта, в токенах (по умолчанию: 50)minLines(необязательно): Минимальный размер дублирования для отчёта, в строках (по умолчанию: 3)minDepth(необязательно): Минимальная глубина вложенности, считая сам блок. Значение 2 требует как минимум одного уровня вложенности (по умолчанию: 0)minStatements(необязательно): Минимальное количество операторов; применяется только к блокам операторов (по умолчанию: 0)minDuplicates(необязательно): Сколько копий фрагмента должно быть, прежде чем он будет зарегистрирован (по умолчанию: 2)skipObjects(необязательно): Не сообщать о дублированиях, которые являются только литералами объектов (по умолчанию: false)ignoreFiles(необязательно): Glob-шаблоны для исключения из анализаsnapshotPath(необязательно): Путь к зафиксированному базовому снимку подтверждённых дублирований относительно рабочей области. С ним проверка сообщает о том, что изменилось, а не об общем количестве
OrphanFilesDetection:
enabled(обязательно): Включение/отключение обнаружения файлов-сиротvalidEntryPoints(необязательно): Массив шаблонов допустимых точек входа. Если не указан, по умолчанию используетсяprodEntryPoints + devEntryPointsс уровня рабочей области.ignoreTypeImports(необязательно): Исключать импорты только типов при построении графа (по умолчанию: false)graphExclude(необязательно): Шаблоны файлов, исключаемые из анализа графаautofix(необязательно): Автоматически удалять обнаруженные файлы-сироты при запускеrev-dep config run --fix(по умолчанию: false)
UnusedNodeModulesDetection:
enabled(обязательно): Включение/отключение обнаружения неиспользуемых модулейincludeModules(необязательно): Шаблоны модулей для включения в анализexcludeModules(необязательно): Шаблоны модулей для исключения из анализаpkgJsonFieldsWithBinaries(необязательно): Поля Package.json, содержащие ссылки на бинарные файлы (например, lint-staged). Выполняется поиск по обычному текстуfilesWithBinaries(необязательно): Шаблоны файлов для поиска использования бинарных файлов. Выполняется поиск по обычному текстуfilesWithModules(необязательно): Шаблоны не JS/TS файлов для поиска импортов модулей (например, shell-скриптов). Выполняется поиск по обычному текстуoutputType(необязательно): Формат вывода - "list", "groupByModule", "groupByFile"
MissingNodeModulesDetection:
enabled(обязательно): Включение/отключение обнаружения отсутствующих модулейincludeModules(необязательно): Шаблоны модулей для включения в анализexcludeModules(необязательно): Шаблоны модулей для исключения из анализаoutputType(необязательно): Формат вывода - "list", "groupByModule", "groupByFile", "groupByModuleFilesCount"
UnusedExportsDetection:
enabled(обязательно): Включение/отключение обнаружения неиспользуемых экспортовvalidEntryPoints(необязательно): Glob-шаблоны для файлов, чьи экспорты никогда не сообщаются как неиспользуемые. Если не указаны, по умолчанию используютсяprodEntryPoints + devEntryPointsс уровня рабочей области.ignoreTypeExports(необязательно): Пропускатьexport type/export interfaceпри анализе (по умолчанию: false)graphExclude(необязательно): Шаблоны файлов, исключаемые из анализа неиспользуемых экспортовignore(необязательно): Сопоставление glob-шаблонов путей файлов (относительно директории пути рабочей области) с glob-шаблонами имён/спецификаторов экспортов для подавления; каждое значение может быть строкой или массивом строкignoreFiles(необязательно): Glob-шаблоны путей файлов; все неиспользуемые экспорты из соответствующих файлов подавляютсяignoreExports(необязательно): Имена/спецификаторы экспортов (или glob-шаблоны) для глобального подавления (поддерживается"default")autofix(необязательно): Автоматически применять исправимые изменения неиспользуемых экспортов при запускеrev-dep config run --fix(по умолчанию: false)
UnresolvedImportsDetection:
enabled(обязательно): Включение/отключение обнаружения неразрешённых импортовignore(необязательно): Сопоставление glob-шаблонов путей файлов (относительно директории пути рабочей области) с glob-шаблонами запросов импорта для подавления; каждое значение может быть строкой или массивом строкignoreFiles(необязательно): Glob-шаблоны путей файлов; все неразрешённые импорты из соответствующих файлов подавляютсяignoreImports(необязательно): Запросы импорта (или glob-шаблоны) для глобального подавления в результатах по неразрешённым импортам
DevDepsUsageOnProdDetection:
enabled(обязательно): Включение/отключение обнаружения использования ограниченных dev-зависимостейprodEntryPoints(необязательно): Шаблоны точек входа продакшена, от которых выполняется трассировка зависимостей. Если не указаны, по умолчанию используютсяprodEntryPointsуровня рабочей области.ignoreTypeImports(необязательно): Исключать импорты только типов из обхода графа и сопоставления модулей (по умолчанию: false)
RestrictedImportsDetection:
enabled(обязательно): Включение/отключение обнаружения ограниченных импортовentryPoints(обязательно, если включено): Шаблоны точек входа, используемые для построения графа достижимых зависимостей (точки входа уровня рабочей области здесь не применяются)graphExclude(необязательно): Шаблоны файлов, исключаемые из анализа графа ограниченных импортовdenyFiles(необязательно): Запрещённые шаблоны путей файлов (например, ["**/*.tsx"])denyModules(необязательно): Запрещённые шаблоны модулей (например, ["react", "react-*"])ignoreMatches(необязательно): Шаблоны файлов/модулей, исключаемые из результатов по ограниченным импортамignoreTypeImports(необязательно): Исключать импорты только типов из обхода (по умолчанию: false)
Преимущества по производительности
Конфигурационный подход даёт значительные преимущества в производительности:
- Единое построение дерева зависимостей: Строит одно полное дерево зависимостей для всех рабочих областей
- Параллельное выполнение рабочих областей: Обрабатывает несколько рабочих областей одновременно
- Параллельное выполнение проверок: Запускает все включённые проверки в каждой рабочей области параллельно
- Оптимизированное обнаружение файлов: Находит файлы один раз и использует повторно во всех проверках
Благодаря этому проверки на основе конфигурации выполняются быстрее, чем последовательный запуск отдельных команд, особенно для больших кодовых баз с несколькими подпакетами.
Исследовательский набор инструментов 🔧
Практические примеры показывают, как использовать команды CLI rev-dep для исследования, отладки или создания проверок качества кода для вашего проекта.
Как определить, где файл используется в проекте```
rev-dep resolve --file path/to/file.ts
Вы увидите все точки входа, которые неявно требуют этот файл, а также пути разрешения.
### **Как проверить, используется ли файл**```
rev-dep resolve --file path/to/file.ts --compact-summary
Показывает, сколько точек входа косвенно зависят от файла.
Как определить мёртвые файлы```
rev-dep entry-points
При необходимости исключите точки входа фреймворка с помощью `--result-exclude`.
Например, исключите допустимые точки входа Next.js при использовании pages router, исключите каталог scripts — скрипты являются допустимыми точками входа — и исключите все тестовые файлы:```
rev-dep entry-points --result-exclude "pages/**","scripts/**","**/*.test.*"
Как перечислить все файлы, импортируемые точкой входа```
rev-dep files --entry-point path/to/file.ts
Полезно для выявления тяжёлых компонентов или непреднамеренных зависимостей.
### **Как сократить лишние импорты для точки входа**
1. Перечислите все импортируемые файлы: ```
rev-dep files --entry-point path/to/entry.ts
- Выявите подозрительные файлы.
- Проследите, почему они включены: ```
rev-dep resolve --file path/to/suspect --entry-points path/to/entry.ts --all
Как обнаружить циклические зависимости```
rev-dep circular
### **Как обнаружить дублированный код**```
rev-dep duplicated-code
Reports repeated code blocks and JSX elements - units you can extract - rather than repeated lines. Add --blind-identifiers to catch copies whose variables were renamed.
Как найти неиспользуемые node-модули```
rev-dep node-modules unused
### **Как найти отсутствующие node modules**```
rev-dep node-modules missing
Как проверить использование места в node_modules```
rev-dep node-modules dirs-size
### **Как обнаружить dev-зависимости, используемые в производственном коде**```
rev-dep config run
Когда devDepsUsageOnProdDetection включён в вашей конфигурации, rev-dep будет:
- Строить графы зависимостей от указанных production-точек входа
- Определять все файлы, достижимые из этих точек входа
- Проверять, есть ли импортируемые модули в
devDependenciesв package.json - Сообщать о нарушениях, показывая, какие dev-зависимости и где используются
Пример вывода:``` ❌ Restricted Dev Dependencies Usage Issues (2): lodash (dev dependency) - src/components/Button.tsx (from entry point: src/pages/index.tsx) - src/utils/helpers.ts (from entry point: src/pages/index.tsx) eslint (dev dependency) - src/config/eslint-config.js (from entry point: src/server.ts)
**Важные примечания:**
- Импорты только типов (например, `import type { ReactNode } from 'react'`) игнорируются, когда включён `ignoreTypeImports`
- Помечаются только зависимости из `devDependencies` в package.json
- Продакшен-зависимости из `dependencies` разрешены
- Помогает предотвратить сбои во время выполнения в продакшен-сборках
## Работа с монорепо 🏗️
Rev-dep обеспечивает первоклассную поддержку проектов монорепо, позволяя выполнять точный анализ зависимостей между пакетами рабочего пространства.
### Флаг followMonorepoPackages
Флаг `--follow-monorepo-packages` включает разрешение импортов из пакетов рабочего пространства монорепо. По умолчанию этот флаг установлен в `false` для сохранения совместимости с проектами, состоящими из одного пакета.```bash
# Enable monorepo package resolution
rev-dep circular --follow-monorepo-packages
rev-dep resolve --file src/utils.ts --follow-monorepo-packages
rev-dep entry-points --follow-monorepo-packages
Когда включено, rev-dep будет:
- Автоматически обнаруживать пакеты рабочей области путем сканирования конфигурации монорепозитория
- Разрешать импорты между пакетами в пределах рабочей области
- Следовать полю exports в package.json для корректного разрешения модулей
Поддержка карты exports
Rev-dep полностью поддерживает поле exports в файлах package.json, которое является стандартным способом определения точек входа пакетов в современных проектах Node.js.
Поддержка карты exports включает:
- Условные exports с использованием условий, таких как
node,import,defaultи пользовательских условий - Шаблоны с подстановочными знаками для гибкого сопоставления подпутей
- Сахарный синтаксис для простых определений основного экспорта
- Вложенные условия для сложных сценариев разрешения
Флаг имён условий
Чтобы управлять тем, какие условные exports разрешаются, используйте флаг --condition-names. Это позволяет указать приоритет условий при разрешении exports пакета:```bash
Resolve exports for different environments
rev-dep circular --condition-names=node,import,default rev-dep resolve --file src/utils.ts --condition-names=import,node rev-dep entry-points --condition-names=default,node,import
Условия обрабатываются в указанном порядке, при этом используется первое подходящее условие. Стандартные условия включают:
- `node` — среда Node.js
- `import` — ES-модули
- `require` — CommonJS
- `default` — резервное условие
- Пользовательские условия, специфичные для вашего проекта или инструментов сборки
Пример package.json с exports:```json
{
"name": "@myorg/utils",
"exports": {
".": {
"import": "./dist/index.mjs",
"require": "./dist/index.js",
"default": "./dist/index.js"
},
"./helpers": "./dist/helpers.js",
"./types/*": "./dist/types/*.d.ts"
}
}
Как работает разрешение монорепозитория
-
Обнаружение монорепозитория: когда
followMonorepoPackagesвключён, rev-dep сканирует конфигурацию рабочего пространства (pnpm-workspace.yaml, package.json workspaces и т. д.) -
Разрешение пакетов: импорты в пакеты рабочего пространства разрешаются с помощью конфигурации exports пакета, с запасным вариантом на поля main/module, если exports не определены
-
Проверка зависимостей: инструмент проверяет, что межпакетные импорты разрешены только тогда, когда целевой пакет указан в dependencies или devDependencies потребителя
-
Разрешение путей: все пути разрешаются относительно корней соответствующих пакетов, что обеспечивает точное отслеживание зависимостей во всём монорепозитории
Это делает rev-dep особенно эффективным для крупномасштабных монорепозиториев, где понимание межпакетных зависимостей критически важно для поддержания качества кода и архитектуры.
Сравнение производительности ⚡
Rev-dep может выполнять несколько проверок в монорепозитории объёмом 500k+ строк кода с несколькими подпакетами примерно за 150 мс.
Он превосходит Madge, dpdm, dependency-cruiser, skott, knip, depcheck и другие аналогичные инструменты.
Вот сравнение производительности конкретных задач между rev-dep и альтернативами:
| Задача | Время выполнения [мс] | Альтернатива | Время альтернативы [мс] | Медленнее, чем rev-dep |
|---|---|---|---|---|
| Поиск циклических зависимостей | 151 | knip | 3 040 | 20x |
| Поиск неиспользуемых экспортов | 186 | knip | 3 176 | 17x |
| Поиск неиспользуемых файлов | 168 | knip | 3 006 | 18x |
| Поиск неиспользуемых node-модулей | 170 | knip | 3 069 | 18x |
| Поиск отсутствующих node-модулей | 160 | knip | 3 076 | 19x |
| Список всех файлов, импортируемых точкой входа | 81 | madge | 6 591 | 81x |
| Обнаружение точек входа | 149 | madge | 13 632 | 92x |
| Контроль границ модулей | 164 | dependency-cruiser | 8 140 | 50x |
| Поиск ограниченных импортов | 170 | dependency-cruiser | 10 995 | 65x |
| Поиск ограниченных импортёров | 179 | dependency-cruiser | 9 234 | 52x |
| Разрешение пути зависимости между файлами | 221 | предложите вариант | ||
| Подсчёт строк кода | 251 | предложите вариант | ||
| Анализ размеров каталогов node_modules | 561 | предложите вариант |
Платформа: WSL Linux Debian Intel(R) Core(TM) i9-14900KF CPU
Измерения:
hyperfine -w 4 -r 8(4 прогревочных + 8 измеряемых запусков)Проект: 580k строк кода, 6024 исходных файла next.js приложения
Сравнение производительности проверки циклов
В таблице ниже представлено сравнение производительности различных инструментов, выполняющих обнаружение циклических импортов.
Проверка циклов в rev-dep выполняется примерно в 20 раз быстрее, чем у самого быстрого аналога.
| Инструмент | Версия | Время [мс] |
|---|---|---|
| 🥇 rev-dep | 3.0.0 | 154 |
| 🥈 knip * | 6.29.0 | 3 040 |
| 🥉 circular-dependency-scanner | 3.0.1 | 3 355 |
| dpdm-fast | 1.0.14 | 6 070 |
| dpdm | 4.2.0 | 6 667 |
| dependency-cruiser | 18.1.0 | 8 258 |
| madge | 8.0.0 | 13 569 |
| skott | 0.35.11 | 61 613 |
* knip всегда игнорирует рёбра импорта только типов и не предоставляет флага для их включения. Каждый цикл в
этой кодовой базе содержит хотя бы одно такое ребро, поэтому knip сообщает о 0 циклах — его 3 040 мс — это реальный полный
анализ, просто меньшего графа. rev-dep circular -t, который применяет то же правило, соглашается
точно (0 циклов) за 143,3 мс ± 10,3.
Платформа: WSL Linux Debian Intel(R) Core(TM) i9-14900KF CPU
Измерения:
hyperfine -w 4 -r 8(4 прогревочных + 8 измеряемых запусков)Проект: 580k строк кода, 6024 исходных файла next.js приложения
Подробные измерения со средним временем и использованными командами см. в PERFORMANCE.md.
Справочник по CLI 📖
rev-dep circular
Обнаружение циклических зависимостей в вашем проекте
Синопсис
Анализирует проект для поиска циклических зависимостей между модулями. Циклические зависимости могут вызывать трудно отлаживаемые проблемы, и их, как правило, следует избегать.``` rev-dep circular [flags]
#### Примеры```
rev-dep circular --ignore-types-imports
Опции```
--condition-names strings List of conditions for package.json imports resolution (e.g. node, imports, default)
-c, --cwd string Working directory for the command (default "$PWD") --follow-monorepo-packages strings Enable resolution of imports from monorepo workspace packages. Pass without value to follow all, or pass package names -h, --help help for circular -t, --ignore-type-imports Exclude type imports from the analysis --process-ignored-files strings Glob patterns to process even if they are ignored by gitignore or exclude patterns --tsconfig-json string Path to tsconfig.json (default: ./tsconfig.json) -v, --verbose Show warnings and verbose output
### rev-dep config
Создание и выполнение файлов конфигурации rev-dep
#### Краткий обзор
Команды для создания и выполнения файлов конфигурации rev-dep.
#### Опции```
-c, --cwd string Working directory (default "$PWD")
-h, --help help for config
rev-dep config run
Выполнить все проверки, определённые в (.)rev-dep.config.json(c)
Синопсис
Обработать (.)rev-dep.config.json(c) и выполнить все включённые проверки (циклические импорты, осиротевшие файлы, границы модулей, соглашения об импортах, модули Node.js, неиспользуемые экспорты, неразрешённые импорты, ограниченные импорты и использование ограниченных dev-зависимостей) для каждой рабочей области.``` rev-dep config run [flags]
#### Опции```
-c, --cwd string Working directory (default "$PWD")
--fix Automatically fix fixable issues
--format string Output format (json, issues-list)
-h, --help help for run
--lint-config Also lint the config after running; prints only error/warning counts and fails (non-zero exit) on any lint error. Use 'config lint' for details and --fix
--lint-config-rules strings Which lint rules to run with --lint-config (comma-separated). Default: all. Implies --lint-config
--list-all-issues List all issues instead of limiting output
--recheck Run all checks again after '--fix' to validate the final state
--update-snapshot Rewrite every configured duplicated-code snapshot from this run, acknowledging what it found.
-v, --verbose Show warnings and verbose output
--workspaces strings Subset of workspaces to run (comma-separated list of workspace paths)
rev-dep config init
Инициализация нового файла rev-dep.config.json
Синопсис
Создайте новый файл конфигурации rev-dep.config.json в текущем каталоге с настройками по умолчанию.``` rev-dep config init [flags]
#### Параметры```
-c, --cwd string Working directory (default "$PWD")
-h, --help help for init
rev-dep config lint
Сообщает (и при желании удаляет) шаблоны glob/path в конфигурации, которым ничто не соответствует
Краткий обзор
Сканирует (.)rev-dep.config.json(c) на предмет «мёртвых» шаблонов glob и path — шаблонов игнорирования, шаблонов точек входа, путей рабочей области, исключений графа, запрещённых файлов/модулей и т.п., — которые больше не соответствуют ни одному обнаруженному файлу или модулю. Со временем в конфигурации накапливаются шаблоны для файлов, которые были переименованы или удалены; эта команда выявляет их, чтобы конфигурация оставалась лаконичной.
С флагом --fix мёртвые шаблоны удаляются на месте с сохранением всех комментариев и форматирования. Некоторые шаблоны выводятся в отчёт, но никогда не удаляются автоматически, поскольку их удаление может изменить поведение проверки или сделать конфигурацию недействительной — пути рабочей области, обязательные точки входа / файлы / модули и селекторы границ модулей. Они помечаются как «не удаляются автоматически»; устраняйте их вручную.``` rev-dep config lint [flags]
#### Опции```
-c, --cwd string Working directory (default "$PWD")
--fix Remove dead patterns from the config file (preserves comments and formatting)
-h, --help help for lint
--rules strings Lint rules to run (comma-separated): orphan-file-globs, orphan-module-globs, overlapping-globs, trailing-commas, compact. Default: all. orphan-file-globs/overlapping-globs use file discovery; orphan-module-globs parses the dependency tree; trailing-commas and compact only read the config file.
-v, --verbose Show warnings and verbose output
rev-dep config migrate
Обновляет конфигурацию v2 до схемы v3 (2.0)
Краткий обзор
Обновляет (.)rev-dep.config.json(c) из схемы v2 в v3 (версия конфигурации 2.0).
Команда применяет безопасные и однозначные изменения на месте (переименовывая массив 'rules' верхнего уровня в 'workspaces', поднимая 'configVersion' до 2.0 и удаляя устаревшую опцию 'algorithm' из детекторов циклических импортов), сохраняя все комментарии и форматирование. Проверьте изменения с помощью git перед коммитом.
Затем она перечисляет, что не смогла изменить за вас: glob-паттерны, чей набор совпадений мог сдвинуться из-за более строгих, согласованных с gitignore правил v3, и изменения поведения, которые не может исправить ни одна правка конфигурации. Проверьте их вручную - см. руководство по критическим изменениям v3.``` rev-dep config migrate [flags]
#### Опции```
-c, --cwd string Working directory (default "$PWD")
-h, --help help for migrate
rev-dep debug
Инструменты отладки для проверки внутренностей парсера и резолвера
Синопсис
Инструменты отладки для проверки того, как rev-dep разбирает файлы и разрешает зависимости. Вывод не соответствует semver.
Опции```
-h, --help help for debug
### rev-dep debug get-tree-for-cwd
Debug: Показать полное дерево зависимостей для анализа
#### Синопсис
Инструмент отладки для просмотра полного дерева зависимостей. Вывод не следует semver.```
rev-dep debug get-tree-for-cwd [flags]
Опции```
--condition-names strings List of conditions for package.json imports resolution (e.g. node, imports, default)
--cwd string Working directory for the command (default "$PWD")
--follow-monorepo-packages strings Enable resolution of imports from monorepo workspace packages. Pass without value to follow all, or pass package names
-h, --help help for get-tree-for-cwd -t, --ignore-type-imports Exclude type imports from the analysis --include-dev-deps-from-root Treat the monorepo root package.json devDependencies as available to package code, so they are not reported as missing or unresolved. Mirrors config nodeModulesResolution.includeDevDepsFromRoot --node-modules-resolution string Which package.json each import is validated against: 'entry-package' (the cwd package.json, default) or 'nearest-package' (each file's own nearest package.json) (default "entry-package") --tsconfig-json string Path to tsconfig.json (default: ./tsconfig.json) -v, --verbose Show warnings and verbose output
### rev-dep debug list-cwd-files
Перечислить все файлы в текущем рабочем каталоге
#### Синопсис
Рекурсивно перечисляет все файлы в указанном каталоге, с возможностью фильтрации результатов.```
rev-dep debug list-cwd-files [flags]
Примеры```
rev-dep debug list-cwd-files --include='.ts' --exclude='.test.ts'
#### Опции```
--count Only display the count of matching files
--cwd string Directory to list files from (default "$PWD")
--exclude strings Exclude files matching these glob patterns
-h, --help help for list-cwd-files
--include strings Only include files matching these glob patterns
rev-dep debug parse-file
Отладка: показать разобранные импорты для одного файла
Синопсис
Инструмент отладки для проверки того, как парсер обрабатывает конкретный файл. Вывод не следует semver.``` rev-dep debug parse-file [flags]
#### Опции```
--condition-names strings List of conditions for package.json imports resolution (e.g. node, imports, default)
--cwd string Working directory for the command (default "$PWD")
--file string file to parse
--follow-monorepo-packages strings Enable resolution of imports from monorepo workspace packages. Pass without value to follow all, or pass package names
-h, --help help for parse-file
--include-dev-deps-from-root Treat the monorepo root package.json devDependencies as available to package code, so they are not reported as missing or unresolved. Mirrors config nodeModulesResolution.includeDevDepsFromRoot
--node-modules-resolution string Which package.json each import is validated against: 'entry-package' (the cwd package.json, default) or 'nearest-package' (each file's own nearest package.json) (default "entry-package")
--tsconfig-json string Path to tsconfig.json (default: ./tsconfig.json)
-v, --verbose Show warnings and verbose output
rev-dep debug parse-tsconfig
Отладка: показать разобранные псевдонимы конфигурации TypeScript
Краткий обзор
Инструмент отладки для проверки того, как разбирается конфигурация TypeScript и какие псевдонимы извлекаются. Вывод не следует семантическому версионированию (semver).``` rev-dep debug parse-tsconfig [flags]
#### Параметры```
-h, --help help for parse-tsconfig
--tsconfig string Path to TypeScript configuration file
rev-dep duplicated-code
Находит код, дублирующийся между файлами проекта (и внутри них).
Краткое описание
Сканирует каждый исходный файл в поисках копируемых фрагментов — блоков в фигурных скобках и JSX-элементов, на всех уровнях вложенности — и сообщает о тех, что встречаются более одного раза.
При сравнении полностью игнорируются форматирование и комментарии, поэтому копии с изменёнными отступами всё равно совпадают.
Четыре фильтра определяют, что считать заслуживающим упоминания. --min-tokens и --min-lines измеряют размер; --min-depth и --min-statements — сложность; именно это отличает дублирующийся конфигурационный объект с тремя ключами от дублированной логики: никакой порог по размеру не справится, потому что ключи объекта и строковые значения могут быть длинными. --min-duplicates задаёт, сколько копий необходимо для срабатывания.
По умолчанию код должен совпадать в исходном виде. Каждый флаг --blind-* исключает одну категорию токенов из сравнения, и их можно свободно комбинировать:
--blind-identifiers имена считаются масками, поэтому копия, в которой переменные, функции или компоненты переименованы, всё равно будет обнаружена --blind-strings содержимое строк и шаблонов считается масками --blind-numbers числовые литералы считаются масками``` rev-dep duplicated-code [flags]
#### Примеры```
rev-dep duplicated-code --cwd ./src --blind-identifiers
Опции```
--blind-identifiers Ignore the spelling of names, so a copy whose variables, functions or components were renamed still counts as duplication.
--blind-numbers Ignore the value of numeric literals, so a copy with different constants still counts
--blind-strings Ignore the text of string and template literals, so a copy with different messages or keys still counts
-c, --cwd string Working directory for the command (default "$PWD") -f, --format string Output format: "human" or "json". JSON reports every finding with its canonical hash and the byte and line range of each occurrence, for comparing against another run or another tool (default "human") -h, --help help for duplicated-code --ignore-files strings Glob patterns of files to leave out of the analysis. --json-snippets Include the source of each finding in JSON output. Off by default because snippets dominate the file size and a comparison keyed on ranges does not need them --min-depth int Smallest duplication to report, in nesting levels counting the block itself. 1 admits everything; 2 requires at least one nested level, which is what filters out flat objects and single JSX elements however long their keys or strings are --min-duplicates int How many copies a chunk needs before it is reported. Raise to 3 to ignore code that has only been copied once (default 2) --min-lines int Smallest duplication to report, in lines of the first occurrence (default 3) --min-statements int Smallest duplication to report, in statements directly inside the block. Applies only to statement blocks (function and control-flow bodies); object literals and JSX elements are expressions and are not filtered by it - use --min-depth for those --min-tokens int Smallest duplication to report, in tokens. Tokens rather than characters because the count does not change when a --blind-* flag is applied, so one number means the same amount of code whatever is being ignored (default 50) --process-ignored-files strings Glob patterns to analyse even when gitignore excludes them. --skip-objects Do not report duplications that are only object literals. --snapshot string Path to a JSON snapshot of acknowledged duplications. With it, the command reports what changed since the snapshot instead of everything that exists, and exits non-zero on any difference --update-snapshot Rewrite the --snapshot file from this run, acknowledging everything it found. Always explicit: nothing updates a snapshot on its own
### rev-dep entry-points
Обнаруживает и перечисляет все точки входа в проекте
#### Краткое описание
Анализирует структуру проекта для выявления всех потенциальных точек входа.
Полезно для понимания архитектуры и зависимостей вашего приложения.```
rev-dep entry-points [flags]
Примеры```
rev-dep entry-points --print-deps-count
#### Параметры```
--condition-names strings List of conditions for package.json imports resolution (e.g. node, imports, default)
-n, --count Only display the number of entry points found
-c, --cwd string Working directory for the command (default "$PWD")
--follow-monorepo-packages strings Enable resolution of imports from monorepo workspace packages. Pass without value to follow all, or pass package names
--graph-exclude strings Exclude files matching these glob patterns from analysis
-h, --help help for entry-points
-t, --ignore-type-imports Exclude type imports from the analysis
--print-deps-count Show the number of dependencies for each entry point
--process-ignored-files strings Glob patterns to process even if they are ignored by gitignore or exclude patterns
--result-exclude strings Exclude files matching these glob patterns from results
--result-include strings Only include files matching these glob patterns in results
--tsconfig-json string Path to tsconfig.json (default: ./tsconfig.json)
-v, --verbose Show warnings and verbose output
rev-dep files
Список всех файлов в дереве зависимостей точки входа
Синопсис
Рекурсивно находит и перечисляет все файлы, которые требуются указанной точкой входа.``` rev-dep files [flags]
#### Примеры```
rev-dep files --entry-point src/index.ts
Параметры```
--condition-names strings List of conditions for package.json imports resolution (e.g. node, imports, default)
-n, --count Only display the count of files in the dependency tree -c, --cwd string Working directory for the command (default "$PWD") -p, --entry-point string Entry point file to analyze (required) --follow-monorepo-packages strings Enable resolution of imports from monorepo workspace packages. Pass without value to follow all, or pass package names -h, --help help for files -t, --ignore-type-imports Exclude type imports from the analysis --process-ignored-files strings Glob patterns to process even if they are ignored by gitignore or exclude patterns --tsconfig-json string Path to tsconfig.json (default: ./tsconfig.json) -v, --verbose Show warnings and verbose output
### rev-dep imported-by
Список всех файлов, которые напрямую импортируют указанный файл
#### Краткое описание
Находит и выводит список всех файлов в проекте, которые напрямую импортируют указанный файл.
Это полезно для понимания влияния изменений на конкретный файл.```
rev-dep imported-by [flags]
Примеры```
rev-dep imported-by --file src/utils/helpers.ts
#### Опции```
--condition-names strings List of conditions for package.json imports resolution (e.g. node, imports, default)
-n, --count Only display the count of importing files
-c, --cwd string Working directory for the command (default "$PWD")
-f, --file string Target file to find importers for (required)
--follow-monorepo-packages strings Enable resolution of imports from monorepo workspace packages. Pass without value to follow all, or pass package names
-h, --help help for imported-by
--list-imports List the import identifiers used by each file
--process-ignored-files strings Glob patterns to process even if they are ignored by gitignore or exclude patterns
--tsconfig-json string Path to tsconfig.json (default: ./tsconfig.json)
-v, --verbose Show warnings and verbose output
rev-dep lines-of-code
Подсчет фактических строк кода в проекте, исключая комментарии и пустые строки.``` rev-dep lines-of-code [flags]
#### Примеры```
rev-dep lines-of-code
Опции```
-c, --cwd string Directory to analyze (default "$PWD") -h, --help help for lines-of-code
### rev-dep list-cwd-files
Показать все файлы в текущей рабочей директории
#### Краткое описание
Рекурсивно перечисляет все файлы в указанной директории с возможностью фильтрации результатов.```
rev-dep list-cwd-files [flags]
Примеры```
rev-dep list-cwd-files --include='.ts' --exclude='.test.ts'
#### Параметры```
--count Only display the count of matching files
--cwd string Directory to list files from (default "$PWD")
--exclude strings Exclude files matching these glob patterns
-h, --help help for list-cwd-files
--include strings Only include files matching these glob patterns
rev-dep unresolved
Перечислить неразрешенные импорты в проекте
Синопсис
Обнаруживает и перечисляет импорты, которые не удалось разрешить в ходе разрешения импортов. Группирует импорты по файлам.``` rev-dep unresolved [flags]
#### Опции```
--condition-names strings List of conditions for package.json imports resolution (e.g. node, imports, default)
--custom-asset-extensions strings Additional asset extensions treated as resolvable (e.g. glb,mp3)
-c, --cwd string Working directory for the command (default "$PWD")
--follow-monorepo-packages strings Enable resolution of imports from monorepo workspace packages. Pass without value to follow all, or pass package names
-h, --help help for unresolved
--ignore stringToString Map of file path (relative to cwd) to exact import request to ignore (e.g. --ignore src/index.ts=some-module) (default [])
--ignore-files strings File path glob patterns to ignore in unresolved output
--ignore-imports strings Import requests to ignore globally in unresolved output
--include-dev-deps-from-root Treat the monorepo root package.json devDependencies as available to package code, so they are not reported as missing or unresolved. Mirrors config nodeModulesResolution.includeDevDepsFromRoot
--node-modules-resolution string Which package.json each import is validated against: 'entry-package' (the cwd package.json, default) or 'nearest-package' (each file's own nearest package.json) (default "entry-package")
--process-ignored-files strings Glob patterns to process even if they are ignored by gitignore or exclude patterns
--tsconfig-json string Path to tsconfig.json (default: ./tsconfig.json)
-v, --verbose Show warnings and verbose output
rev-dep node-modules
Анализ и управление зависимостями Node.js
Краткое описание
Инструменты для анализа и управления зависимостями модулей Node.js. Помогает выявлять неиспользуемые, отсутствующие или дублирующиеся зависимости в вашем проекте.
Примеры```
rev-dep node-modules used -p src/index.ts rev-dep node-modules unused --exclude-modules=@types/* rev-dep node-modules missing --entry-points=src/main.ts
#### Опции```
-h, --help help for node-modules
rev-dep node-modules analyze-size
Анализ использования дискового пространства node_modules
Описание
Предоставляет детальный анализ размера каталога node_modules. Помогает выявить зависимости, занимающие много места.``` rev-dep node-modules analyze-size [flags]
#### Примеры```
rev-dep node-modules analyze-size
Параметры```
-c, --cwd string Working directory for the command (default "$PWD") -h, --help help for analyze-size
### rev-dep node-modules dirs-size
Вычисляет суммарный размер файлов в каталогах node_modules
#### Краткое описание
Вычисляет и отображает размер каталогов node_modules в текущем каталоге и подкаталогах. Размеры будут меньше фактического размера файла, занимаемого на диске. Инструмент вычисляет фактический размер файла, а не размер на диске (связано с использованием дисковых блоков).```
rev-dep node-modules dirs-size [flags]
Примеры```
rev-dep node-modules dirs-size
#### Опции```
-c, --cwd string Working directory for the command (default "$PWD")
-h, --help help for dirs-size
rev-dep node-modules installed-duplicates
Поиск и оптимизация дублирующихся установок пакетов
Краткое описание
Определяет пакеты, которые установлены несколько раз в node_modules. Может оптимизировать использование дискового пространства, создавая симлинки между дублирующимися пакетами.``` rev-dep node-modules installed-duplicates [flags]
#### Примеры```
rev-dep node-modules installed-duplicates --optimize --size-stats
Опции```
-c, --cwd string Working directory for the command (default "$PWD") -h, --help help for installed-duplicates --isolate Create symlinks only within the same top-level node_module directories. By default optimize creates symlinks between top-level node_module directories (eg. when workspaces are used). Needs --optimize flag to take effect --optimize Automatically create symlinks to deduplicate packages --size-stats Print node modules dirs size before and after optimization. Might take longer than optimization itself --verbose Show detailed information about each optimization
### rev-dep node-modules installed
Список всех установленных npm-пакетов в проекте
#### Краткое описание
Рекурсивно сканирует каталоги node_modules, чтобы вывести список всех установленных пакетов.
Полезен для аудита зависимостей в монорепозиториях.```
rev-dep node-modules installed [flags]
Примеры```
rev-dep node-modules installed --include-modules=@myorg/*
#### Параметры```
-c, --cwd string Working directory for the command (default "$PWD")
-e, --exclude-modules strings list of modules to exclude from the output
-h, --help help for installed
-i, --include-modules strings list of modules to include in the output
rev-dep node-modules отсутствуют
Находит импортируемые пакеты, не указанные в package.json
Краткое описание
Определяет пакеты, которые импортируются в вашем коде, но не объявлены в зависимостях package.json.``` rev-dep node-modules missing [flags]
#### Примеры```
rev-dep node-modules missing --entry-points=src/main.ts
Опции```
--condition-names strings List of conditions for package.json imports resolution (e.g. node, imports, default)
-n, --count Only display the count of modules -c, --cwd string Working directory for the command (default "$PWD") -p, --entry-points strings Entry point file(s) to start analysis from (default: auto-detected) -e, --exclude-modules strings list of modules to exclude from the output -b, --files-with-binaries strings Additional files to search for binary usages. Use paths relative to cwd -m, --files-with-node-modules strings Additional files to search for module imports. Use paths relative to cwd --follow-monorepo-packages strings Enable resolution of imports from monorepo workspace packages. Pass without value to follow all, or pass package names --group-by-file Organize output by project file path --group-by-module Organize output by npm package name --group-by-module-files-count Organize output by npm package name and show count of files using it -h, --help help for missing -t, --ignore-type-imports Exclude type imports from the analysis --include-dev-deps-from-root Treat the monorepo root package.json devDependencies as available to package code, so they are not reported as missing or unresolved. Mirrors config nodeModulesResolution.includeDevDepsFromRoot -i, --include-modules strings list of modules to include in the output --node-modules-resolution string Which package.json each import is validated against: 'entry-package' (the cwd package.json, default) or 'nearest-package' (each file's own nearest package.json) (default "entry-package") --pkg-fields-with-binaries strings Additional package.json fields to check for binary usages --tsconfig-json string Path to tsconfig.json (default: ./tsconfig.json) -v, --verbose Show warnings and verbose output --zero-exit-code Use this flag to always return zero exit code
### rev-dep node-modules prune-docs
Удаляет файлы, похожие на markdown/документацию, из установленных пакетов node_modules
#### Краткий обзор
Удаляет файлы из установленных пакетов node_modules на основе glob-шаблонов.
Полезно для удаления файлов README/LICENSE/docs, чтобы уменьшить размер зависимостей.```
rev-dep node-modules prune-docs [flags]
Примеры```
rev-dep node-modules prune-docs --defaults rev-dep node-modules prune-docs --patterns ".md,README.md,docs/**" rev-dep node-modules prune-docs --defaults --patterns ".txt"
#### Опции```
-c, --cwd string Working directory for the command (default "$PWD")
--defaults Use default prune patterns: LICENSE, README.md, docs/**
-h, --help help for prune-docs
--pattern strings Alias for --patterns
-p, --patterns strings Glob patterns (relative to each package root) of files to remove, e.g. "*.md,README.md,docs/**"
rev-dep node-modules unused
Находит установленные пакеты, которые не импортируются в вашем коде
Краткое описание
Сравнивает зависимости из package.json с фактическими импортами в вашей кодовой базе, чтобы выявить потенциально неиспользуемые пакеты.``` rev-dep node-modules unused [flags]
#### Примеры```
rev-dep node-modules unused --exclude-modules=@types/*
Параметры```
--condition-names strings List of conditions for package.json imports resolution (e.g. node, imports, default)
-n, --count Only display the count of modules -c, --cwd string Working directory for the command (default "$PWD") -p, --entry-points strings Entry point file(s) to start analysis from (default: auto-detected) -e, --exclude-modules strings list of modules to exclude from the output -b, --files-with-binaries strings Additional files to search for binary usages. Use paths relative to cwd -m, --files-with-node-modules strings Additional files to search for module imports. Use paths relative to cwd --follow-monorepo-packages strings Enable resolution of imports from monorepo workspace packages. Pass without value to follow all, or pass package names -h, --help help for unused -t, --ignore-type-imports Exclude type imports from the analysis --include-dev-deps-from-root Treat the monorepo root package.json devDependencies as available to package code, so they are not reported as missing or unresolved. Mirrors config nodeModulesResolution.includeDevDepsFromRoot -i, --include-modules strings list of modules to include in the output --node-modules-resolution string Which package.json each import is validated against: 'entry-package' (the cwd package.json, default) or 'nearest-package' (each file's own nearest package.json) (default "entry-package") --pkg-fields-with-binaries strings Additional package.json fields to check for binary usages --tsconfig-json string Path to tsconfig.json (default: ./tsconfig.json) -v, --verbose Show warnings and verbose output --zero-exit-code Use this flag to always return zero exit code
### rev-dep node-modules used
Список всех npm-пакетов, импортированных в вашем коде
#### Краткое описание
Анализирует ваш код, чтобы определить, какие npm-пакеты действительно используются.
Помогает отслеживать зависимости вашего проекта, необходимые во время выполнения.```
rev-dep node-modules used [flags]
Примеры```
rev-dep node-modules used -p src/index.ts --group-by-module
#### Опции```
--condition-names strings List of conditions for package.json imports resolution (e.g. node, imports, default)
-n, --count Only display the count of modules
-c, --cwd string Working directory for the command (default "$PWD")
-p, --entry-points strings Entry point file(s) to start analysis from (default: auto-detected)
-e, --exclude-modules strings list of modules to exclude from the output
-b, --files-with-binaries strings Additional files to search for binary usages. Use paths relative to cwd
-m, --files-with-node-modules strings Additional files to search for module imports. Use paths relative to cwd
--follow-monorepo-packages strings Enable resolution of imports from monorepo workspace packages. Pass without value to follow all, or pass package names
--group-by-entry-point Organize output by entry point file path
--group-by-entry-point-modules-count Organize output by entry point and show count of unique modules
--group-by-file Organize output by project file path
--group-by-module Organize output by npm package name
--group-by-module-entry-points-count Organize output by npm package name and show count of entry points using it
--group-by-module-files-count Organize output by npm package name and show count of files using it
--group-by-module-show-entry-points Organize output by npm package name and list entry points using it
-h, --help help for used
-t, --ignore-type-imports Exclude type imports from the analysis
--include-dev-deps-from-root Treat the monorepo root package.json devDependencies as available to package code, so they are not reported as missing or unresolved. Mirrors config nodeModulesResolution.includeDevDepsFromRoot
-i, --include-modules strings list of modules to include in the output
--node-modules-resolution string Which package.json each import is validated against: 'entry-package' (the cwd package.json, default) or 'nearest-package' (each file's own nearest package.json) (default "entry-package")
--pkg-fields-with-binaries strings Additional package.json fields to check for binary usages
--tsconfig-json string Path to tsconfig.json (default: ./tsconfig.json)
-v, --verbose Show warnings and verbose output
rev-dep resolve
Trace и отображение пути зависимостей между файлами в вашем проекте
Краткое описание
Анализирует и отображает цепочку зависимостей между указанными файлами. Помогает понять, как связаны различные части вашей кодовой базы.``` rev-dep resolve [flags]
#### Примеры```
rev-dep resolve -p src/index.ts -f src/utils/helpers.ts
Опции```
-a, --all Show all possible resolution paths, not just the first one --compact-summary Display a compact summary of found paths --condition-names strings List of conditions for package.json imports resolution (e.g. node, imports, default) -c, --cwd string Working directory for the command (default "$PWD") -p, --entry-points strings Entry point file(s) or glob pattern(s) to start analysis from (default: auto-detected) -f, --file string Target file to check for dependencies --follow-monorepo-packages strings Enable resolution of imports from monorepo workspace packages. Pass without value to follow all, or pass package names --graph-exclude strings Glob patterns to exclude files from dependency analysis -h, --help help for resolve -t, --ignore-type-imports Exclude type imports from the analysis --include-dev-deps-from-root Treat the monorepo root package.json devDependencies as available to package code, so they are not reported as missing or unresolved. Mirrors config nodeModulesResolution.includeDevDepsFromRoot --module string Target node module name to check for dependencies --node-modules-resolution string Which package.json each import is validated against: 'entry-package' (the cwd package.json, default) or 'nearest-package' (each file's own nearest package.json) (default "entry-package") --process-ignored-files strings Glob patterns to process even if they are ignored by gitignore or exclude patterns --tsconfig-json string Path to tsconfig.json (default: ./tsconfig.json) -v, --verbose Show warnings and verbose output
<!-- cli-docs-end -->
## Глоссарий 📚
Некоторые термины, используемые в предметной области, которую охватывает **rev-dep**, могут сбивать с толку.
Вот небольшой глоссарий, который поможет вам разобраться в этих понятиях.
### Зависимость
Зависимость (*dependency*) можно понимать буквально. В контексте графа зависимостей проекта она может означать:
* **модуль node / пакет** (пакет является зависимостью проекта или файла), или
* **файл исходного кода** (файл является зависимостью другого файла, если он импортирует его).
### Точка входа
Точка входа (*entry point*) — это исходный файл, который **не импортируется никаким другим файлом**.
Она может представлять собой:
* главную точку входа приложения
* отдельную страницу или функцию
* конфигурационные или тестовые bootstrap-файлы
- в зависимости от структуры проекта.
### Неиспользуемый / мёртвый файл
Файл считается *неиспользуемым* или *мёртвым*, когда:
* он является **точкой входа** (ничто его не импортирует), **и**
* его запуск **не даёт значимого вывода** или побочного эффекта.
На практике такие файлы часто можно безопасно удалить.
### Циклическая зависимость
Циклическая зависимость (*circular dependency*) возникает, когда файл **прямо или косвенно импортирует сам себя** через цепочку импортов.
Это может привести к непредсказуемому поведению во время выполнения, неинициализированным значениям или трудноуловимым ошибкам.
Однако циклические зависимости между **импортами только типов TypeScript** обычно безвредны.
### Обратная зависимость (или «зависимые»)
Файлы, которые *импортируют* данный файл.
Полезно для ответа на вопрос: «Что сломается, если я изменю или удалю этот файл?»
### Граф импортов / граф зависимостей
Визуальное представление того, как файлы или модули импортируют друг друга.
### Отсутствующая зависимость / неиспользуемый node-модуль
Модуль, который ваш код импортирует, но который **не указан в package.json**.
### Неиспользуемая зависимость / неиспользуемый node-модуль
Зависимость, указанная в **package.json**, которая **нигде не импортируется** в исходном коде.
### Корневой каталог / корень проекта
Каталог верхнего уровня, используемый как отправная точка для анализа зависимостей.
## Телеметрия
Rev-Dep собирает одно **анонимное** событие, только во время выполнения `rev-dep config run`. Подробнее в [документации по телеметрии](https://rev-dep.com/docs/telemetry).
Полностью отказаться от телеметрии можно, установив `REV_DEP_TELEMETRY_OFF=true`.
## Сделано в 🇵🇱 и 🇯🇵 с 🧠 от [@jayu](https://github.com/jayu)
Я надеюсь, что этот небольшой программный продукт поможет вам обнаружить и понять сложность вашего проекта и тем самым придаст вам больше уверенности при рефакторинге. Если этот инструмент оказался полезным, не стесняйтесь поставить ему ⭐!
### Мои другие проекты
- [CodeQue - Structural code search](https://codeque.co)
- [Structural Code Search VSCode](https://marketplace.visualstudio.com/items?itemName=CodeQue.codeque)