Извиняюсь за вводящее в заблуждение название, я не знал, как объяснить проблему в одном предложении.
Вот пример моей упрощенной конфигурации 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), загруженные на страницу, используют эти пути для работы.
План выглядит следующим образом:
- позволяет всем пакетам импортировать
@material-ui/core
компоненты через основную точку входа, например: import { Button } from '@material-ui/core';
. и @material-ui/core
полностью экстернализован.
- Здесь нет проблем. Кажется, это работает как ожидалось!
- все пакеты связывают свои значки (
@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
Ищу предложений,
Спасибо всем, кто смотрит на это.