DEV Community

Arif Balaev
Arif Balaev

Posted on

NPM dependencies. В какую категорию импортировать пакет?

Какие есть категории зависимостей?

Обратимся к официальной документации от NPM

  1. dependencies
  2. devDependencies
  3. peerDependencies
  4. peerDependenciesMeta
  5. bundledDependencies
  6. optionalDependencies

Отличия

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

Перед тем как импортировать зависимость в свой проект, не забудьте спросить себя "А она точно мне нужна?". Может быть вам нужна какая-то малая ее часть, которую вы сможете написать самостоятельно. Но выбор между собственной имплементацией и сторонней - это уже отдельная тема.

twitter @balaevarif

Top comments (0)