Code splitting and dynamic loading in Webpack 4 with react loadable










1















So I have a webpack 4 react app that has 2 parts:



  • Login component

  • Rest of the app

My routes.js looks like this:



import React from 'react';
import Home from 'Home';

....

const LoadableLoginComponent = Loadable(
loader: () => import('LoginComponent'),
loading()
return <div>Loading...</div>

);

.....

render()
if (!this.loggedIn)
return (
<LoadableLoginComponent />
);


return (
<Home />
);



My webpack generates 2 js files bundle.min.js and 0.min.js



My assumption was that by default if the user is not logged in only the login component will load with 0.min.js and if user is logged in, the rest of the app will load
but I see both bundle.min.js and 0.min.js being loaded.










share|improve this question


























    1















    So I have a webpack 4 react app that has 2 parts:



    • Login component

    • Rest of the app

    My routes.js looks like this:



    import React from 'react';
    import Home from 'Home';

    ....

    const LoadableLoginComponent = Loadable(
    loader: () => import('LoginComponent'),
    loading()
    return <div>Loading...</div>

    );

    .....

    render()
    if (!this.loggedIn)
    return (
    <LoadableLoginComponent />
    );


    return (
    <Home />
    );



    My webpack generates 2 js files bundle.min.js and 0.min.js



    My assumption was that by default if the user is not logged in only the login component will load with 0.min.js and if user is logged in, the rest of the app will load
    but I see both bundle.min.js and 0.min.js being loaded.










    share|improve this question
























      1












      1








      1








      So I have a webpack 4 react app that has 2 parts:



      • Login component

      • Rest of the app

      My routes.js looks like this:



      import React from 'react';
      import Home from 'Home';

      ....

      const LoadableLoginComponent = Loadable(
      loader: () => import('LoginComponent'),
      loading()
      return <div>Loading...</div>

      );

      .....

      render()
      if (!this.loggedIn)
      return (
      <LoadableLoginComponent />
      );


      return (
      <Home />
      );



      My webpack generates 2 js files bundle.min.js and 0.min.js



      My assumption was that by default if the user is not logged in only the login component will load with 0.min.js and if user is logged in, the rest of the app will load
      but I see both bundle.min.js and 0.min.js being loaded.










      share|improve this question














      So I have a webpack 4 react app that has 2 parts:



      • Login component

      • Rest of the app

      My routes.js looks like this:



      import React from 'react';
      import Home from 'Home';

      ....

      const LoadableLoginComponent = Loadable(
      loader: () => import('LoginComponent'),
      loading()
      return <div>Loading...</div>

      );

      .....

      render()
      if (!this.loggedIn)
      return (
      <LoadableLoginComponent />
      );


      return (
      <Home />
      );



      My webpack generates 2 js files bundle.min.js and 0.min.js



      My assumption was that by default if the user is not logged in only the login component will load with 0.min.js and if user is logged in, the rest of the app will load
      but I see both bundle.min.js and 0.min.js being loaded.







      reactjs webpack webpack-4 code-splitting react-loadable






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 14 '18 at 23:54









      prgrmrprgrmr

      4002519




      4002519






















          1 Answer
          1






          active

          oldest

          votes


















          1














          If you have an if statement (!this.loggedIn) in the non-login bundle that has the possibility of rendering the login component, then the login component will be included in your non-login bundle. This is because the entry point for your non-login bundle searches all the possible code paths and files it might need to use and bundles them together, even if your if statement always fails and never uses the Login component.






          share|improve this answer






















            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%2f53310521%2fcode-splitting-and-dynamic-loading-in-webpack-4-with-react-loadable%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            If you have an if statement (!this.loggedIn) in the non-login bundle that has the possibility of rendering the login component, then the login component will be included in your non-login bundle. This is because the entry point for your non-login bundle searches all the possible code paths and files it might need to use and bundles them together, even if your if statement always fails and never uses the Login component.






            share|improve this answer



























              1














              If you have an if statement (!this.loggedIn) in the non-login bundle that has the possibility of rendering the login component, then the login component will be included in your non-login bundle. This is because the entry point for your non-login bundle searches all the possible code paths and files it might need to use and bundles them together, even if your if statement always fails and never uses the Login component.






              share|improve this answer

























                1












                1








                1







                If you have an if statement (!this.loggedIn) in the non-login bundle that has the possibility of rendering the login component, then the login component will be included in your non-login bundle. This is because the entry point for your non-login bundle searches all the possible code paths and files it might need to use and bundles them together, even if your if statement always fails and never uses the Login component.






                share|improve this answer













                If you have an if statement (!this.loggedIn) in the non-login bundle that has the possibility of rendering the login component, then the login component will be included in your non-login bundle. This is because the entry point for your non-login bundle searches all the possible code paths and files it might need to use and bundles them together, even if your if statement always fails and never uses the Login component.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 15 '18 at 0:45









                Shawn AndrewsShawn Andrews

                975617




                975617





























                    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%2f53310521%2fcode-splitting-and-dynamic-loading-in-webpack-4-with-react-loadable%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







                    這個網誌中的熱門文章

                    How to read a connectionString WITH PROVIDER in .NET Core?

                    Node.js Script on GitHub Pages or Amazon S3

                    Museum of Modern and Contemporary Art of Trento and Rovereto