require config to map a certain sub URL to a submodule of the same bundle [confusing?]












0















Apologies for a misleading title, I didn't know how to explain the problem in one sentence.



Here's an example of my simplified requirejs config:



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


material-ui.development.js is a umd bundle containing everything needed for material-ui except the icons.



This requirejs config is being loaded at startup of the main script and all other bundles (umd webpack bundles) loaded on the page rely on these paths to work.



The plan is as follows:




  1. have all bundles import @material-ui/core components through the main entrypoint like so: import { Button } from '@material-ui/core';. and have @material-ui/core externalized completely.


    • No problems here. this seems to work as expected!



  2. have all bundles bundle their own icons (@material-ui/icons). Might contain some duplications of icons across multiple bundles, but that is negligible. In the future if this becomes out of hand, I can create a new custom bundle with a set of commonly used icons to avoid duplication.


    • The problem with 2. is this:




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



Each icon uses the createSvgIcon utility to wrap the svg in the SvgIcon component. But look at the require statement at the top! it asks for @material-ui/core/SvgIcon which if I externalize in my webpack config, require will try to fetch it by calling http://localhost:3000/assets/vendor/@material-ui/core/material-ui.development/SvgIcon (!!!)



So now the question:




  • Is there a way to somehow map @material-ui/core/SvgIcon to look for the bundle that is already externalized with @material-ui/core and read the property SvgIcon? Are shims capable of something like that?.


Of course, my fear with making a special bundle exclusively for SvgIcon is that I will have to do the same thing with every outlier component like this and this not an acceptable solution.



Also I could of course bundle the createSvgIcon utility in each one of the bundles, but:



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



that means withStyles will be packaged as well, which pulls in a million other things:



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



Looking for suggestions,



Thanks to anyone looking at this.










share|improve this question



























    0















    Apologies for a misleading title, I didn't know how to explain the problem in one sentence.



    Here's an example of my simplified requirejs config:



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


    material-ui.development.js is a umd bundle containing everything needed for material-ui except the icons.



    This requirejs config is being loaded at startup of the main script and all other bundles (umd webpack bundles) loaded on the page rely on these paths to work.



    The plan is as follows:




    1. have all bundles import @material-ui/core components through the main entrypoint like so: import { Button } from '@material-ui/core';. and have @material-ui/core externalized completely.


      • No problems here. this seems to work as expected!



    2. have all bundles bundle their own icons (@material-ui/icons). Might contain some duplications of icons across multiple bundles, but that is negligible. In the future if this becomes out of hand, I can create a new custom bundle with a set of commonly used icons to avoid duplication.


      • The problem with 2. is this:




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



    Each icon uses the createSvgIcon utility to wrap the svg in the SvgIcon component. But look at the require statement at the top! it asks for @material-ui/core/SvgIcon which if I externalize in my webpack config, require will try to fetch it by calling http://localhost:3000/assets/vendor/@material-ui/core/material-ui.development/SvgIcon (!!!)



    So now the question:




    • Is there a way to somehow map @material-ui/core/SvgIcon to look for the bundle that is already externalized with @material-ui/core and read the property SvgIcon? Are shims capable of something like that?.


    Of course, my fear with making a special bundle exclusively for SvgIcon is that I will have to do the same thing with every outlier component like this and this not an acceptable solution.



    Also I could of course bundle the createSvgIcon utility in each one of the bundles, but:



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



    that means withStyles will be packaged as well, which pulls in a million other things:



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



    Looking for suggestions,



    Thanks to anyone looking at this.










    share|improve this question

























      0












      0








      0








      Apologies for a misleading title, I didn't know how to explain the problem in one sentence.



      Here's an example of my simplified requirejs config:



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


      material-ui.development.js is a umd bundle containing everything needed for material-ui except the icons.



      This requirejs config is being loaded at startup of the main script and all other bundles (umd webpack bundles) loaded on the page rely on these paths to work.



      The plan is as follows:




      1. have all bundles import @material-ui/core components through the main entrypoint like so: import { Button } from '@material-ui/core';. and have @material-ui/core externalized completely.


        • No problems here. this seems to work as expected!



      2. have all bundles bundle their own icons (@material-ui/icons). Might contain some duplications of icons across multiple bundles, but that is negligible. In the future if this becomes out of hand, I can create a new custom bundle with a set of commonly used icons to avoid duplication.


        • The problem with 2. is this:




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



      Each icon uses the createSvgIcon utility to wrap the svg in the SvgIcon component. But look at the require statement at the top! it asks for @material-ui/core/SvgIcon which if I externalize in my webpack config, require will try to fetch it by calling http://localhost:3000/assets/vendor/@material-ui/core/material-ui.development/SvgIcon (!!!)



      So now the question:




      • Is there a way to somehow map @material-ui/core/SvgIcon to look for the bundle that is already externalized with @material-ui/core and read the property SvgIcon? Are shims capable of something like that?.


      Of course, my fear with making a special bundle exclusively for SvgIcon is that I will have to do the same thing with every outlier component like this and this not an acceptable solution.



      Also I could of course bundle the createSvgIcon utility in each one of the bundles, but:



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



      that means withStyles will be packaged as well, which pulls in a million other things:



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



      Looking for suggestions,



      Thanks to anyone looking at this.










      share|improve this question














      Apologies for a misleading title, I didn't know how to explain the problem in one sentence.



      Here's an example of my simplified requirejs config:



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


      material-ui.development.js is a umd bundle containing everything needed for material-ui except the icons.



      This requirejs config is being loaded at startup of the main script and all other bundles (umd webpack bundles) loaded on the page rely on these paths to work.



      The plan is as follows:




      1. have all bundles import @material-ui/core components through the main entrypoint like so: import { Button } from '@material-ui/core';. and have @material-ui/core externalized completely.


        • No problems here. this seems to work as expected!



      2. have all bundles bundle their own icons (@material-ui/icons). Might contain some duplications of icons across multiple bundles, but that is negligible. In the future if this becomes out of hand, I can create a new custom bundle with a set of commonly used icons to avoid duplication.


        • The problem with 2. is this:




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



      Each icon uses the createSvgIcon utility to wrap the svg in the SvgIcon component. But look at the require statement at the top! it asks for @material-ui/core/SvgIcon which if I externalize in my webpack config, require will try to fetch it by calling http://localhost:3000/assets/vendor/@material-ui/core/material-ui.development/SvgIcon (!!!)



      So now the question:




      • Is there a way to somehow map @material-ui/core/SvgIcon to look for the bundle that is already externalized with @material-ui/core and read the property SvgIcon? Are shims capable of something like that?.


      Of course, my fear with making a special bundle exclusively for SvgIcon is that I will have to do the same thing with every outlier component like this and this not an acceptable solution.



      Also I could of course bundle the createSvgIcon utility in each one of the bundles, but:



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



      that means withStyles will be packaged as well, which pulls in a million other things:



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



      Looking for suggestions,



      Thanks to anyone looking at this.







      webpack requirejs material-ui






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 14 '18 at 1:49









      Trevor DonahueTrevor Donahue

      496429




      496429
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292052%2frequire-config-to-map-a-certain-sub-url-to-a-submodule-of-the-same-bundle-confu%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292052%2frequire-config-to-map-a-certain-sub-url-to-a-submodule-of-the-same-bundle-confu%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Xamarin.iOS Cant Deploy on Iphone

          Glorious Revolution

          Dulmage-Mendelsohn matrix decomposition in Python