Я создаю пакет npm, который по сути является шаблоном для моих других проектов. Он содержит некоторые пользовательские компоненты, функции, конфигурации и другие подобные файлы, которые я использую почти в каждом проекте.
Вместо того, чтобы все мои отдельные проекты перечисляли одни и те же зависимости (все одинаковые версии), было бы намного проще просто включить все общие зависимости в один пакет npm. Таким образом, каждый проект должен устанавливать и обновлять только один единственный пакет (плюс любые дополнительные пакеты, которые могут быть установлены, которые являются уникальными для проекта), а не устанавливать и обновлять каждую общую зависимость для каждого отдельного проекта.
Это означает, что:
- Я легко вижу, какие пакеты являются уникальными для проекта, так как все, кроме пакета пользовательских шаблонов, будет уникальной зависимостью от проекта.
- Установка и обновление будут намного быстрее.
- Не вносить изменений в импорт / требование и использование каждой зависимости, поскольку все они перечислены в той же папке node_modules, что и мои зависимости package.json.
- Если я решу добавить / удалить общую зависимость, мне не нужно проверять, что каждый отдельный проект также добавил / удалил ее. Мне нужно только запустить npm update, и он позаботится обо мне.
- Я могу убедиться, что все проекты используют совместимые версии общих зависимостей. Если бы я обрабатывал зависимости традиционным способом, имея все общие зависимости, перечисленные в package.json, тогда запуск
npm outdated
показал бы, что обновления доступны. Однако, если новые версии не совместимы, я бы не стал их обновлять. Если бы я сделал это по-новому, я предлагаю, чтобы общие зависимости обновлялись только тогда, когда я знаю, что они совместимы (т.е. только если в моем пакете шаблонов есть обновление).
Я слышал, что это плохая практика, но я не понимаю, почему это так в этом случае. Какие недостатки я не вижу здесь? eslint-plugin-import жалуется, когда я делаю это с правилом no-extraneous-dependencies , но я легко могу создать исключение. Это просто стандартная лучшая практика, чтобы не делать этого, чтобы каждый проект был полностью автономным (что не является проблемой для моего использования), или есть какая-то другая важная причина не делать этого?