Skip to content

Зависимости

При сборке с помощью tsdown зависимости обрабатываются автоматически, чтобы ваша библиотека оставалась лёгкой и удобной для использования. В этом разделе описано, как tsdown работает с разными типами зависимостей и как вы можете настроить это поведение под свои задачи.

Поведение по умолчанию

dependencies и peerDependencies

По умолчанию tsdown не включает в бандл зависимости, указанные в полях dependencies и peerDependencies вашего package.json:

  • dependencies: считаются внешними и не попадают в итоговый бандл. Они будут установлены автоматически при установке вашей библиотеки через npm или другой менеджер пакетов.
  • peerDependencies: также считаются внешними. Пользователь вашей библиотеки должен установить их самостоятельно (иногда это делает менеджер пакетов автоматически).

devDependencies и фантомные зависимости

  • devDependencies: Пакеты из раздела devDependencies в package.json включаются в сборку только при фактическом импорте или использовании в исходном коде.
  • Фантомные зависимости: Пакеты, находящиеся в node_modules, но не указанные в package.json, включаются в сборку только при их использовании в коде.

Другими словами, в сборку попадут только те devDependencies и фантомные зависимости, которые действительно используются в вашем проекте.

По умолчанию будут включены в бандл.

Настройка обработки зависимостей

tsdown предоставляет две опции для изменения поведения по умолчанию:

Опция external

Опция external позволяет явно указать, какие зависимости должны считаться внешними и не попадать в бандл:

tsdown.config.ts
ts
import { defineConfig } from 'tsdown'

export default defineConfig({
  external: ['lodash', /^@my-scope\//],
})

В этом примере lodash и все пакеты с префиксом @my-scope будут считаться внешними.

Опция noExternal

Опция noExternal позволяет принудительно включить определённые зависимости в бандл, даже если они указаны в dependencies или peerDependencies:

tsdown.config.ts
ts
import { defineConfig } from 'tsdown'

export default defineConfig({
  noExternal: ['some-package'],
})

В этом случае some-package будет включён в итоговый бандл.

Работа с зависимостями в файлах деклараций

Для файлов деклараций по умолчанию tsdown не включает никакие зависимости. Это позволяет сохранять .d.ts чистыми и сфокусированными только на типах вашей библиотеки.

Настройка разрешения типов

С помощью опции dts.resolve можно явно указать, типы каких зависимостей нужно включить в .d.ts:

tsdown.config.ts
ts
import { defineConfig } from 'tsdown'

export default defineConfig({
  dts: {
    resolve: ['lodash', /^@types\//],
  },
})

В этом примере типы для lodash и всех пакетов с префиксом @types будут включены в итоговые декларации.

Краткое резюме

  • По умолчанию:
    • dependencies и peerDependencies считаются внешними и не включаются в бандл.
    • devDependencies и фантомные зависимости включаются в сборку только если они фактически используются в вашем коде.
  • Настройка:
    • Используйте external, чтобы явно указать внешние зависимости.
    • Используйте noExternal, чтобы включить определённые зависимости в бандл.
  • Файлы деклараций:
    • Зависимости не включаются по умолчанию.
    • Используйте dts.resolve, чтобы добавить нужные типы в .d.ts.

Понимание и правильная настройка обработки зависимостей поможет сделать вашу библиотеку оптимальной по размеру и удобной для использования.

Распространяется под лицензией MIT.