Я переношу некоторые репозитории на монорепозиторий, который использует рабочие пространства пряжи с Lerna. Пакеты выглядят примерно так:
|-- packages
|-- app
|-- components-1
|-- components-2
app
входит в состав webpack. Он включает как зависимости components-1
, так и components-2
, а также React 15.3.2.
components-1
включает одноранговую зависимость React 15.6.1. Итак, у него есть React 15.6.1 - это зависимость от разработчиков. Это необходимо для запуска response-styleguidist и тестов из этого пакета и в основном является артефактом его существования в виде отдельного репо до миграции.
Похоже, что, поскольку существует две версии React, webpack объединит обе, потому что обе успешно разрешаются в разных местах. React 15.3.2 устанавливается на корневом уровне репо node_modules
, а React 15.6.1 устанавливается в components-1/node_modules
.
То же самое происходит и с ReactDOM, как и следовало ожидать.
Мое решение заключалось в том, чтобы определить псевдонимы для react
и react-dom
в конфигурации веб-пакета приложения:
resolve: {
alias: {
'react': path.resolve('../../node_modules/react'),
'react-dom': path.resolve('../../node_modules/react-dom'),
},
}
Но мне это кажется немного взломанным, поскольку он будет работать только в этих настроенных рабочих пространствах пряжи.
Мне интересно, есть ли лучший способ сделать это, либо в конфигурации веб-пакета вне приложения, либо в какой-то конфигурации рабочих пространств пряжи.