Зависимости
При сборке с помощью 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
позволяет явно указать, какие зависимости должны считаться внешними и не попадать в бандл:
import { defineConfig } from 'tsdown'
export default defineConfig({
external: ['lodash', /^@my-scope\//],
})
В этом примере lodash
и все пакеты с префиксом @my-scope
будут считаться внешними.
Опция noExternal
Опция noExternal
позволяет принудительно включить определённые зависимости в бандл, даже если они указаны в dependencies
или peerDependencies
:
import { defineConfig } from 'tsdown'
export default defineConfig({
noExternal: ['some-package'],
})
В этом случае some-package
будет включён в итоговый бандл.
Работа с зависимостями в файлах деклараций
Для файлов деклараций по умолчанию tsdown
не включает никакие зависимости. Это позволяет сохранять .d.ts
чистыми и сфокусированными только на типах вашей библиотеки.
Настройка разрешения типов
С помощью опции dts.resolve
можно явно указать, типы каких зависимостей нужно включить в .d.ts
:
import { defineConfig } from 'tsdown'
export default defineConfig({
dts: {
resolve: ['lodash', /^@types\//],
},
})
В этом примере типы для lodash
и всех пакетов с префиксом @types
будут включены в итоговые декларации.
Краткое резюме
- По умолчанию:
dependencies
иpeerDependencies
считаются внешними и не включаются в бандл.devDependencies
и фантомные зависимости включаются в сборку только если они фактически используются в вашем коде.
- Настройка:
- Используйте
external
, чтобы явно указать внешние зависимости. - Используйте
noExternal
, чтобы включить определённые зависимости в бандл.
- Используйте
- Файлы деклараций:
- Зависимости не включаются по умолчанию.
- Используйте
dts.resolve
, чтобы добавить нужные типы в.d.ts
.
Понимание и правильная настройка обработки зависимостей поможет сделать вашу библиотеку оптимальной по размеру и удобной для использования.