Зависимости от сверстников в монорепозитории

Если пакеты в монорепозитории имеют одноранговые зависимости, как сделать эти зависимости доступными для них во время разработки?

Например, пакет в /packages/namespace/alpha/ может иметь devDependency из styled-components в своем package.json.

Возможные варианты:

  1. Объявите те же зависимости, что и зависимости разработчика (ненужное дублирование и затраты на обслуживание).

  2. Установите пакеты в маршруте монорепозитория package.json (потенциальные проблемы с разрешением модуля при использовании yarn link.

Я использую Lerna с рабочими пространствами пряжи.


person Undistraction    schedule 20.09.2019    source источник


Ответы (1)


Рабочие области пряжи должны устанавливать почти все в корне node_modules, полагаясь на алгоритм разрешения модуля узла. Это то, что вы описали в варианте 2.

Итак, в основном это должно работать в большинстве случаев. Проблемы могут возникнуть, когда какой-либо инструмент полагается на свою собственную логику разрешения или есть разные версии некоторых зависимостей и так далее.

Вариант 1 - довольно распространенный подход, но, как вы сказали, он увеличивает стоимость обслуживания. Возможно, вам придется отслеживать такие зависимости и отмечать их как внешние, чтобы не включать их во встроенную версию библиотеки.

Возможны обходные пути. Например, Angular предлагает использовать ТС paths вариант. И вы можете сделать то же самое без машинописного текста, например, в Create React App используя jsconfig.json. Или вы можете использовать что-то похожее на этот плагин накопления, который автоматизирует добавление внешних элементов на основе peerDependencies, так что вы также можете безопасно перечислить их как devDependies.

Оба варианта считаются допустимыми в этой проблеме с lerna

Другой вариант - установить ваши одноранговые зависимости, и на данный момент для этого нет официального решения. Существует пакет install peers cli, который работает с npm и yarn. Есть запрос на горячую функцию для yarn. Планируется добавить эту функцию в npm v7, на самом деле npm делала это до v3 .

Подводя итоги, не существует универсального решения, и вы должны понимать, что вы хотите получить и чем ради этого можете пожертвовать.

Обновление (14 декабря 2020 г.) - NPM 7 устанавливает одноранговые приложения

Как я уже упоминал в первоначальном ответе, в npm v7 по умолчанию реализована установка зависимостей одноранговых узлов. См. RFC для дальнейшие подробности.

person Shlang    schedule 13.04.2020