很抱歉标题有误导性,我不知道如何用一句话来解释这个问题。
下面是我的简化RequireJS配置示例:
{
paths: {
...
"@material-ui/core": "http://localhost:3000/assets/vendor/@material-ui/core/material-ui.development"
...
}
}
material-ui.development.js
是一个umd包,包含除图标以外的所有材料ui所需的内容。
这个requirejs配置在主脚本启动时加载,页面上加载的所有其他包(umd webpack包)都依赖这些路径工作。
计划如下:
-
导入所有捆绑包
@material-ui/core
通过主入口点的组件如下:
import { Button } from '@material-ui/core';
是的。并且拥有
@材料界面/核心
完全外部化。
-
所有捆绑包都有自己的图标(
@material-ui/icons
)中。可能包含多个捆绑包中的一些图标副本,但这可以忽略不计。在将来,如果这成为失控,我可以创建一个新的自定义捆绑包与一组常用的图标,以避免重复。
https://github.com/mui-org/material-ui/blob/master/packages/material-ui-icons/src/utils/createSvgIcon.js#L3
每个图标使用
createSvgIcon
在svgicon组件中包装svg的实用程序。但是看看上面的需求声明!它要求
@material-ui/core/SvgIcon
如果我在webpack配置中外部化,require将尝试通过调用
http://localhost:3000/assets/vendor/@material-ui/core/material-ui.development/SvgIcon
(!!!)
现在的问题是:
-
有办法绘制地图吗
@材料界面/核心/SVGICON
查找已外部化的包
@材料界面/核心
并阅读属性
SvgIcon
是吗?填隙片能做那种东西吗?是的。
当然,我对专门为svgicon制作一个特殊包的担心是,我必须对这样的每个异常组件都做同样的事情,而这不是一个可接受的解决方案。
当然,我也可以将createsvgicon实用程序捆绑到每个捆绑包中,但是:
https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/SvgIcon/SvgIcon.js#L4
这意味着WithStyles也将被打包,这将吸引一百万其他东西:
https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/styles/withStyles.js#L10
寻找建议,
多亏有人看了这个。