Рабочие области пряжи должны устанавливать почти все в корне 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