Какие есть категории зависимостей?
Обратимся к официальной документации от NPM
- dependencies
- devDependencies
- peerDependencies
- peerDependenciesMeta
- bundledDependencies
- optionalDependencies
Отличия
- dependencies - то, что реально нужно проекту в production режиме. Например, утилитные библиотеки react, lodash, classnames итп
- devDependencies - нужны во время разработки (dev). К таким библиотекам могут отнестись:
- библиотеки форматирования - eslint, prettier, ...
- сборщики: webpack, rollup, ...
- babel
- всё, что связано с тестированием
- другие библиотеки, такие как storybook
- peerDependencies - нужен для публикации своего пакета. В эту категорию попадают зависимости, без которых ваш пакет будет работать некорректно. Проекту, устанавливающему ваш пакет нужно убедиться, что у него загружены все зависимости из peerDependencies
- peerDependenciesMeta - мета-данные для peerDependencies. Например, чтобы сделать какую-то зависимость опциональной. Хотя, тогда не понятно, зачем она находится в peerDependencies.
- bundledDependencies - выполняют схожую функциональность, что и обычные dependencies - входят в финальную сборку. Но они решают следующий пример: проект использует пакет1, в котором есть зависимость пакет2 внутри bundledDependencies. Если по каким-то причинам пакет2 будет снят с пубикации и до него не будет доступа, то пакет1 будет всё равно иметь эту зависимость внутри себя до тех пор, пока явно не почистить node_modules или не убрать пакет2 из зависимости пакета1.
- optionalDependencies - то же, что и dependencies, только в случае ошибки их подгрузки сборка не падает
Перед тем как импортировать зависимость в свой проект, не забудьте спросить себя "А она точно мне нужна?". Может быть вам нужна какая-то малая ее часть, которую вы сможете написать самостоятельно. Но выбор между собственной имплементацией и сторонней - это уже отдельная тема.
twitter @balaevarif
Top comments (0)