require config将某个子URL映射到同一包的子模块[令人困惑?]

时间:2018-11-14 01:49:31

标签: webpack requirejs material-ui

对标题的误导表示歉意,我不知道如何用一句话来解释这个问题。

这是我简化的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,如果我在我的webpack配置中将其外部化,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

这意味着withStyles也将被打包,这将带来一百万种其他东西:

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

正在寻找建议

感谢任何关注此事的人。

0 个答案:

没有答案