Как правильно повторно использовать зависимые компоненты с NPM?

#javascript #npm #react-admin #peer-dependencies

Вопрос:

Этот вопрос в основном основан на react-admin тегах , отсюда и теги, но, вероятно, он также полезен в других ситуациях.

Итак, у нас есть react-admin то, что зависит от @material-ui/core . Это позволяет мне использовать пользовательский интерфейс Material в моем собственном коде при реализации пользовательского интерфейса, не завися от @material-ui/core себя. Однако я не могу использовать какую-либо справку из IDE (VSCode / Emacs LSP), например, я не могу ничего автоматически импортировать из @material-ui/core .

Я считаю такое поведение правильным и ожидаемым, поскольку @material-ui/core оно не зависит от моего проекта. Тем не менее, я все еще могу использовать эту способность, поэтому я хотел бы, чтобы мои инструменты знали об этом. Добавление его в качестве моей собственной зависимости довольно уродливо, так как мне пришлось бы синхронизировать версии с react-admin «s», что может быть хлопотно и как бы сводит на нет весь смысл управления зависимостями. Я попытался добавить @material-ui/core в свой peerDependencies , который, кажется, немного отстает, но на удивление работает как для VSCode, так и для LSP.

Итак, вопрос в следующем: какой правильный способ повторного использования зависимостей без добавления к моему проекту множества ненужных зависимостей?

Комментарии:

1. Наличие неожиданных зависимостей (не объявленных) является неожиданным и, следовательно, ГОРАЗДО БОЛЕЕ УРОДЛИВЫМ, чем прямое добавление зависимости. Напротив, добавление @material-ui/core в качестве зависимости в ваш код красиво (что противоположно уродливому), поскольку оно позволяет сопровождающим знать, что используется, а также какая версия используется, просто взглянув на package.json

Ответ №1:

С точки зрения приложения, как правило, если вы хотите использовать @material-ui/core его, вам следует включить его в свои зависимости. понятия не имею, почему вы думаете, что это «некрасиво»

В приложении не должно быть peerDeps. peerDeps предназначен для использования плагином/библиотекой.