Avatar ·

Как скрыть .js.map файлы в Visual Studio Code с помощью File Nesting

Всем привет! Я недавно начал изучать TypeScript и столкнулся с проблемой: после компиляции моих .ts файлов в папке проекта появляется куча дополнительных файлов — .js и .js.map. Это сильно захламляет проводник Visual Studio Code. Вот пример моего проекта. У меня есть файл `app.ts`: ```typescript // app.ts function greet(name: string): string { return `Привет, ${name}!`; } const user = "Иван"; console.log(greet(user)); ``` После запуска `tsc app.ts` в той же папке появляются `app.js` и `app.js.map`. А если у меня 10–20 файлов, то в проводнике становится настоящая каша: все .ts, .js и .js.map перемешаны. Я знаю, что можно настроить `tsconfig.json`, чтобы складывать скомпилированные файлы в отдельную папку `dist`, но это не всегда удобно — иногда нужно, чтобы .js файлы лежали рядом с .ts, например, для работы Node.js. Я слышал, что в VS Code есть функция "File Nesting", которая позволяет "вложить" одни файлы в другие в дереве проводника. Например, сделать так, чтобы `app.js` и `app.js.map` отображались как дочерние элементы `app.ts`. Но я не могу найти, как это настроить. Подскажите, пожалуйста, как правильно настроить File Nesting в Visual Studio Code для TypeScript проектов, чтобы .js и .js.map файлы автоматически скрывались под .ts файлами? И можно ли это сделать глобально для всех проектов? Заранее спасибо! <<>>

Что такое File Nesting и зачем это нужно

File Nesting (вложение файлов) — это встроенная функция Visual Studio Code, которая позволяет группировать связанные файлы в дереве проводника. Например, файлы .js и .js.map можно "спрятать" под родительский .ts файл. Это делает проводник чище и удобнее для навигации.

Базовая настройка через settings.json

Самый простой способ — добавить правила в файл настроек VS Code. Откройте settings.json (через Ctrl+Shift+P → "Preferences: Open Settings (JSON)") и добавьте следующий блок:

{
  "explorer.fileNesting.enabled": true,
  "explorer.fileNesting.patterns": {
    "*.ts": "$(capture).js, $(capture).js.map",
    "*.tsx": "$(capture).js, $(capture).js.map"
  }
}

Как это работает:

  • "explorer.fileNesting.enabled": true — включает функцию вложения.
  • "explorer.fileNesting.patterns" — содержит правила в виде пар "родительский паттерн → список дочерних файлов".
  • "*.ts" — все файлы с расширением .ts становятся родителями.
  • "$(capture).js" — захватывает имя родительского файла (без расширения) и подставляет его. Например, для app.ts будет искать app.js.
  • "$(capture).js.map" — аналогично для app.js.map.

После добавления этих правил перезагрузите VS Code (Ctrl+Shift+P → "Developer: Reload Window"). Теперь в проводнике вы увидите, что app.ts имеет стрелочку слева, а под ним свернуты app.js и app.js.map.

Расширенная настройка для полного покрытия

Если вы используете дополнительные расширения файлов (например, .d.ts для деклараций), добавьте их в правило:

{
  "explorer.fileNesting.enabled": true,
  "explorer.fileNesting.patterns": {
    "*.ts": "$(capture).js, $(capture).js.map, $(capture).d.ts",
    "*.tsx": "$(capture).js, $(capture).js.map",
    "*.js": "$(capture).js.map"
  }
}

Последняя строка "*.js": "$(capture).js.map" полезна, если у вас есть .js файлы, сгенерированные не из TypeScript, но с картами.

Глобальная настройка для всех проектов

Чтобы применить эти правила ко всем проектам на вашем компьютере, добавьте их в пользовательские настройки (User Settings), а не в настройки рабочей области. Откройте settings.json через вкладку "User" (вкладка в левом верхнем углу редактора настроек) и вставьте туда те же правила.

Пример результата

До настройки проводник выглядел так:

📁 my-project
  ├── app.js
  ├── app.js.map
  ├── app.ts
  ├── utils.js
  ├── utils.js.map
  ├── utils.ts

После настройки:

📁 my-project
  ├── app.ts
  │   ├── app.js
  │   └── app.js.map
  ├── utils.ts
  │   ├── utils.js
  │   └── utils.js.map

Теперь проводник стал гораздо чище, и вы можете легко развернуть нужный .ts файл, чтобы увидеть его скомпилированные версии.

Важные замечания

  • Файлы не удаляются и не перемещаются — меняется только их отображение в проводнике.
  • Если вы используете outDir в tsconfig.json (например, "outDir": "./dist"), то вложение не сработает, так как файлы находятся в разных папках. В этом случае лучше использовать отдельную папку для скомпилированных файлов.
  • Для TypeScript проектов с монорепозиториями можно добавить правила для каждого пакета отдельно.
<<>>

Альтернативный подход: использование расширения "File Nesting Updater"

Если вам не хочется вручную редактировать settings.json, можно установить расширение "File Nesting Updater" (автор: Antyos). Оно автоматически обновляет правила File Nesting на основе структуры вашего проекта.

Как использовать:

  1. Установите расширение из Marketplace VS Code.
  2. Нажмите Ctrl+Shift+P и выполните команду "File Nesting: Update Config".
  3. Расширение проанализирует вашу папку и предложит оптимальные правила для TypeScript, JavaScript, CSS и других типов файлов.

Дополнительный совет: игнорирование в поиске

Если вы хотите, чтобы .map файлы не только скрывались в проводнике, но и не появлялись в результатах поиска (Ctrl+Shift+F), добавьте в settings.json:

{
  "search.exclude": {
    "**/*.map": true
  }
}

Это не связано с File Nesting, но помогает дополнительно уменьшить визуальный шум при работе с TypeScript проектами.