DEV Community

Arif Balaev
Arif Balaev

Posted on

3

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

Image of Datadog

The Future of AI, LLMs, and Observability on Google Cloud

Datadog sat down with Google’s Director of AI to discuss the current and future states of AI, ML, and LLMs on Google Cloud. Discover 7 key insights for technical leaders, covering everything from upskilling teams to observability best practices

Learn More

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay