Я перенесу некоторые репозитории в одно хранилище, которое использует рабочие области пряжи с помощью Lerna. Пакеты выглядят примерно так:
|-- packages
|-- app
|-- components-1
|-- components-2
app
в комплекте с веб-пакетом. Он включает в себя как components-1
и components-2
в качестве зависимостей, так и React 15.3.2.
components-1
включает в себя равноправную зависимость React 15.6.1. Так что у него есть React 15.6.1 - это зависимость от dev. Это необходимо для запуска response-styleguidist и тестов из этого пакета, и в основном это артефакт его существования в качестве отдельного репозитория перед миграцией.
Похоже, что поскольку существует две версии React, веб-пакет объединит обе версии, поскольку обе они успешно разрешаются в разных местах. 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'),
},
}
Но мне это кажется немного хакерским, так как он будет работать только в пределах настроенных рабочих областей пряжи.
Мне интересно, есть ли лучший способ сделать это, либо в конфигурации webpack вне приложения, либо в какой-либо конфигурации рабочих областей пряжи.