Назад к обновлениям
New releaseJul 23, 2026

rev-dep v2.19.1

Инструментарий для анализа и оптимизации зависимостей для современных кодовых баз на JavaScript и TypeScript. Обеспечьте чистоту графа зависимостей и удалите неиспользуемый код с помощью очень быстрого CLI.

Поделиться

Rev-dep

Логотип Rev-dep

Возможности  •   Установка  •   Документация  •   Исследовательский инструментарий  •   Справочник CLI

Инструментарий для анализа и оптимизации зависимостей в современных кодовых базах на JavaScript и TypeScript.
Обеспечивайте гигиену графа зависимостей и удаляйте неиспользуемый код с помощью очень быстрого CLI.

Вывод CLI при выполнении конфигурации Rev-dep


версия rev-dep лицензия rev-dep rev-dep приветствует PR

О проекте 📣

По мере роста кодовых баз поддерживать ментальную карту зависимостей становится невозможно. 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-external
  • autofix (необязательно): Следует ли автоматически исправлять нарушения соглашений об импорте (по умолчанию: 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
  1. Выявите подозрительные файлы.
  2. Проследите, почему они включены: ``` 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 будет:

  1. Строить графы зависимостей от указанных production-точек входа
  2. Определять все файлы, достижимые из этих точек входа
  3. Проверять, есть ли импортируемые модули в devDependencies в package.json
  4. Сообщать о нарушениях, показывая, какие 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"
  }
}

Как работает разрешение монорепозитория

  1. Обнаружение монорепозитория: когда followMonorepoPackages включён, rev-dep сканирует конфигурацию рабочего пространства (pnpm-workspace.yaml, package.json workspaces и т. д.)

  2. Разрешение пакетов: импорты в пакеты рабочего пространства разрешаются с помощью конфигурации exports пакета, с запасным вариантом на поля main/module, если exports не определены

  3. Проверка зависимостей: инструмент проверяет, что межпакетные импорты разрешены только тогда, когда целевой пакет указан в dependencies или devDependencies потребителя

  4. Разрешение путей: все пути разрешаются относительно корней соответствующих пакетов, что обеспечивает точное отслеживание зависимостей во всём монорепозитории

Это делает rev-dep особенно эффективным для крупномасштабных монорепозиториев, где понимание межпакетных зависимостей критически важно для поддержания качества кода и архитектуры.

Сравнение производительности ⚡

Rev-dep может выполнять несколько проверок в монорепозитории объёмом 500k+ строк кода с несколькими подпакетами примерно за 150 мс.

Он превосходит Madge, dpdm, dependency-cruiser, skott, knip, depcheck и другие аналогичные инструменты.

Вот сравнение производительности конкретных задач между rev-dep и альтернативами:

ЗадачаВремя выполнения [мс]АльтернативаВремя альтернативы [мс]Медленнее, чем rev-dep
Поиск циклических зависимостей151knip3 04020x
Поиск неиспользуемых экспортов186knip3 17617x
Поиск неиспользуемых файлов168knip3 00618x
Поиск неиспользуемых node-модулей170knip3 06918x
Поиск отсутствующих node-модулей160knip3 07619x
Список всех файлов, импортируемых точкой входа81madge6 59181x
Обнаружение точек входа149madge13 63292x
Контроль границ модулей164dependency-cruiser8 14050x
Поиск ограниченных импортов170dependency-cruiser10 99565x
Поиск ограниченных импортёров179dependency-cruiser9 23452x
Разрешение пути зависимости между файлами221предложите вариант
Подсчёт строк кода251предложите вариант
Анализ размеров каталогов node_modules561предложите вариант

Платформа: 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-dep3.0.0154
🥈 knip *6.29.03 040
🥉 circular-dependency-scanner3.0.13 355
dpdm-fast1.0.146 070
dpdm4.2.06 667
dependency-cruiser18.1.08 258
madge8.0.013 569
skott0.35.1161 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)

Категории