настройка веб-пакета в рабочих пространствах пряжи - PullRequest
0 голосов
/ 10 мая 2019

Я перенесу некоторые репозитории в одно хранилище, которое использует рабочие области пряжи с помощью 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 вне приложения, либо в какой-либо конфигурации рабочих областей пряжи.

1 Ответ

0 голосов
/ 11 мая 2019

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

...