настройка webpack в рабочих пространствах yarn

Я переношу некоторые репозитории на монорепозиторий, который использует рабочие пространства пряжи с 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'),
  },
}

Но мне это кажется немного взломанным, поскольку он будет работать только в этих настроенных рабочих пространствах пряжи.

Мне интересно, есть ли лучший способ сделать это, либо в конфигурации веб-пакета вне приложения, либо в какой-то конфигурации рабочих пространств пряжи.


person Tyler    schedule 10.05.2019    source источник


Ответы (1)


webpack определяет уникальность модуля на основе пути к файлу. Следовательно, если у вас есть две копии response, поступающие из двух разных путей модулей узлов, тогда да, webpack объединит оба. Однако, если вы говорите, что используете рабочие области yarn, это должно означать, что в вашем монорепозитории должна быть только одна node_modules папка.

person Sean Larkin    schedule 10.05.2019
comment
Я не уверен, правильно ли, что монорепозиторий, использующий рабочие области пряжи, должен иметь только одну папку node_modules. Один должен быть на корневом уровне репо и по одному в каждом пакете. - person Tyler; 13.05.2019
comment
Что происходит, когда два пакета используют разные версии React? Например, у меня есть общая библиотека для React 16.13 и проект для React 16.8. Как с этим справились? - person Batman; 17.04.2020