требуют config для сопоставления определенного суб-URL с субмодулем из того же пакета [сбивает с толку?] - PullRequest
0 голосов
/ 14 ноября 2018

Извиняюсь за вводящее в заблуждение название, я не знал, как объяснить проблему в одном предложении.

Вот пример моей упрощенной конфигурации requirejs:

{
    paths: {
        ...
        "@material-ui/core": "http://localhost:3000/assets/vendor/@material-ui/core/material-ui.development"
        ...
    }
}

material-ui.development.js - это пакет umd, содержащий все необходимое для Material-UI, кроме значков.

Эта конфигурация requirejs загружается при запуске основного скрипта, и все остальные пакеты (пакеты umd webpack), загруженные на страницу, используют эти пути для работы.

План выглядит следующим образом:

  1. позволяет всем пакетам импортировать @material-ui/core компоненты через основную точку входа, например: import { Button } from '@material-ui/core';. и @material-ui/core полностью экстернализован.
    • Здесь нет проблем. Кажется, это работает как ожидалось!
  2. все пакеты связывают свои значки (@material-ui/icons). Может содержать некоторые дубликаты иконок в нескольких пакетах, но это незначительно. В будущем, если это выйдет из-под контроля, я могу создать новый пользовательский пакет с набором часто используемых значков, чтобы избежать дублирования.
    • Проблема с 2. заключается в следующем:

https://github.com/mui-org/material-ui/blob/master/packages/material-ui-icons/src/utils/createSvgIcon.js#L3

Каждый значок использует утилиту createSvgIcon, чтобы обернуть svg в компонент SvgIcon. Но посмотрите на утверждение require наверху! он запрашивает @material-ui/core/SvgIcon, который, если я выведу его в конфиге веб-пакета, require попытается получить его, вызвав http://localhost:3000/assets/vendor/@material-ui/core/material-ui.development/SvgIcon (!!!)

Итак, теперь вопрос:

  • Есть ли способ как-то отобразить @material-ui/core/SvgIcon, чтобы найти пакет, уже выведенный с помощью @material-ui/core, и прочитать свойство SvgIcon? Способны ли прокладки на что-то подобное?

Конечно, я боюсь делать специальный пакет исключительно для SvgIcon, потому что мне придется делать то же самое с каждым компонентом, подобным этому, и это не приемлемое решение.

Также я мог бы, конечно, связать утилиту createSvgIcon в каждом из комплектов, но:

https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/SvgIcon/SvgIcon.js#L4

, что означает, что также будут упакованы вместе со стилями, что включает в себя миллион других вещей:

https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/styles/withStyles.js#L10

Ищу предложений,

Спасибо всем, кто смотрит на это.

...