Importing Runtime-Configurable JSON in Typescript and Angular 7











up vote
1
down vote

favorite












I have a runtime translation system in place in my application, which before switching to Angular 7 was using http requests to load a JSON file filled with translations, like the below:



loadLanguage(lang: string) {
this.http.get('assets/lang/' + lang + '.json)
.toPromise()
.then((translations) => this.translations = translations; )
}


As part of an upgrade to Angular 7 I decided to try out importing the json directly rather than using http to get it. This is the new way I've implemented it:



async loadLanguage(lang: string) {
this.translations = await import('assets/lang/' + lang + '.json);
}


This works the way I would expect in terms of changing the language but the problem I am having is changing the JSON files after compilation has no effect on the output of the import.



From the bundle produced by the compilation it looks like all of the imported files are being compiled into chunks which are then loaded when I ask for that particular json file. Am I just getting the wrong idea with these imports and how they work when used with webpack or is there something obvious that I have missed when refactoring my solution?



Thanks










share|improve this question




























    up vote
    1
    down vote

    favorite












    I have a runtime translation system in place in my application, which before switching to Angular 7 was using http requests to load a JSON file filled with translations, like the below:



    loadLanguage(lang: string) {
    this.http.get('assets/lang/' + lang + '.json)
    .toPromise()
    .then((translations) => this.translations = translations; )
    }


    As part of an upgrade to Angular 7 I decided to try out importing the json directly rather than using http to get it. This is the new way I've implemented it:



    async loadLanguage(lang: string) {
    this.translations = await import('assets/lang/' + lang + '.json);
    }


    This works the way I would expect in terms of changing the language but the problem I am having is changing the JSON files after compilation has no effect on the output of the import.



    From the bundle produced by the compilation it looks like all of the imported files are being compiled into chunks which are then loaded when I ask for that particular json file. Am I just getting the wrong idea with these imports and how they work when used with webpack or is there something obvious that I have missed when refactoring my solution?



    Thanks










    share|improve this question


























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      I have a runtime translation system in place in my application, which before switching to Angular 7 was using http requests to load a JSON file filled with translations, like the below:



      loadLanguage(lang: string) {
      this.http.get('assets/lang/' + lang + '.json)
      .toPromise()
      .then((translations) => this.translations = translations; )
      }


      As part of an upgrade to Angular 7 I decided to try out importing the json directly rather than using http to get it. This is the new way I've implemented it:



      async loadLanguage(lang: string) {
      this.translations = await import('assets/lang/' + lang + '.json);
      }


      This works the way I would expect in terms of changing the language but the problem I am having is changing the JSON files after compilation has no effect on the output of the import.



      From the bundle produced by the compilation it looks like all of the imported files are being compiled into chunks which are then loaded when I ask for that particular json file. Am I just getting the wrong idea with these imports and how they work when used with webpack or is there something obvious that I have missed when refactoring my solution?



      Thanks










      share|improve this question















      I have a runtime translation system in place in my application, which before switching to Angular 7 was using http requests to load a JSON file filled with translations, like the below:



      loadLanguage(lang: string) {
      this.http.get('assets/lang/' + lang + '.json)
      .toPromise()
      .then((translations) => this.translations = translations; )
      }


      As part of an upgrade to Angular 7 I decided to try out importing the json directly rather than using http to get it. This is the new way I've implemented it:



      async loadLanguage(lang: string) {
      this.translations = await import('assets/lang/' + lang + '.json);
      }


      This works the way I would expect in terms of changing the language but the problem I am having is changing the JSON files after compilation has no effect on the output of the import.



      From the bundle produced by the compilation it looks like all of the imported files are being compiled into chunks which are then loaded when I ask for that particular json file. Am I just getting the wrong idea with these imports and how they work when used with webpack or is there something obvious that I have missed when refactoring my solution?



      Thanks







      angular typescript angular7






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 11 at 3:58









      Goncalo Peres

      9731311




      9731311










      asked Oct 30 at 13:17









      peppermcknight

      915822




      915822
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          2
          down vote



          accepted










          I don't think you should be doing this. As import() gets converted to required() post compilation. plus this is not a Angular feature it's a TypeScript feature.
          here a very nice and detailed article on Type https://blog.mariusschulz.com/2018/01/14/typescript-2-4-dynamic-import-expressions



          As a recommendation you should be using http calls to download dynamic runtime configuration.






          share|improve this answer





















          • Yeah, on typing this question out I had thought that I might had been mistaken trying to use TS dynamic imports for my config. Thanks for your quick reply.
            – peppermcknight
            Oct 30 at 13:36











          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',
          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%2f53065172%2fimporting-runtime-configurable-json-in-typescript-and-angular-7%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








          up vote
          2
          down vote



          accepted










          I don't think you should be doing this. As import() gets converted to required() post compilation. plus this is not a Angular feature it's a TypeScript feature.
          here a very nice and detailed article on Type https://blog.mariusschulz.com/2018/01/14/typescript-2-4-dynamic-import-expressions



          As a recommendation you should be using http calls to download dynamic runtime configuration.






          share|improve this answer





















          • Yeah, on typing this question out I had thought that I might had been mistaken trying to use TS dynamic imports for my config. Thanks for your quick reply.
            – peppermcknight
            Oct 30 at 13:36















          up vote
          2
          down vote



          accepted










          I don't think you should be doing this. As import() gets converted to required() post compilation. plus this is not a Angular feature it's a TypeScript feature.
          here a very nice and detailed article on Type https://blog.mariusschulz.com/2018/01/14/typescript-2-4-dynamic-import-expressions



          As a recommendation you should be using http calls to download dynamic runtime configuration.






          share|improve this answer





















          • Yeah, on typing this question out I had thought that I might had been mistaken trying to use TS dynamic imports for my config. Thanks for your quick reply.
            – peppermcknight
            Oct 30 at 13:36













          up vote
          2
          down vote



          accepted







          up vote
          2
          down vote



          accepted






          I don't think you should be doing this. As import() gets converted to required() post compilation. plus this is not a Angular feature it's a TypeScript feature.
          here a very nice and detailed article on Type https://blog.mariusschulz.com/2018/01/14/typescript-2-4-dynamic-import-expressions



          As a recommendation you should be using http calls to download dynamic runtime configuration.






          share|improve this answer












          I don't think you should be doing this. As import() gets converted to required() post compilation. plus this is not a Angular feature it's a TypeScript feature.
          here a very nice and detailed article on Type https://blog.mariusschulz.com/2018/01/14/typescript-2-4-dynamic-import-expressions



          As a recommendation you should be using http calls to download dynamic runtime configuration.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Oct 30 at 13:28









          ravi kant

          462




          462












          • Yeah, on typing this question out I had thought that I might had been mistaken trying to use TS dynamic imports for my config. Thanks for your quick reply.
            – peppermcknight
            Oct 30 at 13:36


















          • Yeah, on typing this question out I had thought that I might had been mistaken trying to use TS dynamic imports for my config. Thanks for your quick reply.
            – peppermcknight
            Oct 30 at 13:36
















          Yeah, on typing this question out I had thought that I might had been mistaken trying to use TS dynamic imports for my config. Thanks for your quick reply.
          – peppermcknight
          Oct 30 at 13:36




          Yeah, on typing this question out I had thought that I might had been mistaken trying to use TS dynamic imports for my config. Thanks for your quick reply.
          – peppermcknight
          Oct 30 at 13:36


















           

          draft saved


          draft discarded



















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53065172%2fimporting-runtime-configurable-json-in-typescript-and-angular-7%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