<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Windson Mateus</title>
    <description>The latest articles on Forem by Windson Mateus (@windmateus).</description>
    <link>https://forem.com/windmateus</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F851030%2F2f7b27d3-c504-4df3-8296-b551d11771be.jpg</url>
      <title>Forem: Windson Mateus</title>
      <link>https://forem.com/windmateus</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/windmateus"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Windson Mateus</dc:creator>
      <pubDate>Sat, 08 Nov 2025 03:26:40 +0000</pubDate>
      <link>https://forem.com/windmateus/-ifj</link>
      <guid>https://forem.com/windmateus/-ifj</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/windmateus" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F851030%2F2f7b27d3-c504-4df3-8296-b551d11771be.jpg" alt="windmateus"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/windmateus/gemini-cli-the-future-of-programming-and-reflections-on-the-impacts-of-ai-jg2" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Gemini CLI: The Future of Programming and Reflections on the Impacts of AI&lt;/h2&gt;
      &lt;h3&gt;Windson Mateus ・ Nov 7 '25&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#gemini&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#angular&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>gemini</category>
      <category>angular</category>
      <category>ai</category>
    </item>
    <item>
      <title>Gemini CLI: The Future of Programming and Reflections on the Impacts of AI</title>
      <dc:creator>Windson Mateus</dc:creator>
      <pubDate>Fri, 07 Nov 2025 20:58:06 +0000</pubDate>
      <link>https://forem.com/windmateus/gemini-cli-the-future-of-programming-and-reflections-on-the-impacts-of-ai-jg2</link>
      <guid>https://forem.com/windmateus/gemini-cli-the-future-of-programming-and-reflections-on-the-impacts-of-ai-jg2</guid>
      <description>&lt;p&gt;My biggest motivation in studying and using AI tools has been to seek gains in time/productivity, in the most varied possible areas of life. I've been studying a lot about this lately. And these agentic coding tools have been really catching my attention. Hence came the motivation for this video/post.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/FNBUHcFFZwk"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;Initially, the main difference these agents have compared to what we already use integrated into our IDE is that they have a deep understanding not only of the context but of their entire codebase. It's already fantastic to see the AI guessing the rest of our code as we confirm by hitting TAB. Agents provide much more powerful resources for creating new functionalities and including new features that were not previously possible at this level.&lt;/p&gt;

&lt;p&gt;The Gemini CLI is a programming agent, also known as an agentic programming tool. It allows developers to delegate programming activities to this agent, accelerating deliveries and improving productivity.&lt;/p&gt;

&lt;p&gt;Following what has been emerging in terms of AI, 1 year seems like 1 decade, as the speed with which these tools are evolving is absurd, so much so that what I am covering will certainly be outdated by the time you see this. I started testing the Gemini CLI at version 0.1.22 and days later when I was writing this post, I saw that it had already updated to 0.6.1.&lt;/p&gt;

&lt;p&gt;In the same category as the Gemini CLI, we have Open AI Codex (which currently uses GPT-5 Codex) and Claude Code, both of which are paid. The free version of the Gemini CLI, which we will see in my demonstration, allows for 60 requests per minute and 1000 requests per day, through the Gemini 2.5 Pro model, and that's already a lot, at least for my use. Another free option is Qwen Code, which is adapted from the Gemini CLI. There is also Google Jules, an asynchronous coding assistant, still experimental. Perhaps at some point, it will converge with the Gemini CLI.&lt;/p&gt;

&lt;h4&gt;
  
  
  Installation and Initial Execution
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @google/gemini-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;gemini
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is an option to log in with your Google account (free) or use an Enterprise access API (paid). Then you type commands to converse in a similar way to the conversational AI interface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@&lt;/code&gt; to reference files in the project.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;!&lt;/code&gt; executes commands (e.g.: &lt;code&gt;! npm test&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To end the session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/quit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Example Application in Angular
&lt;/h4&gt;

&lt;p&gt;In the video, I show a frontend application where I usually study and test new Angular features, which is my main work stack currently. It is a simple registration of games, platforms, and genres. As a side note, it communicates with a backend developed in Java — Spring Boot accessing a small Sqlite database.&lt;/p&gt;

&lt;h4&gt;
  
  
  Demonstration of Gemini CLI usage in the video
&lt;/h4&gt;

&lt;p&gt;We will start by replicating the implementation of a basic CRUD on the frontend side. Something that an experienced developer familiar with the application wouldn't take more than 1 hour to implement, but which the Gemini CLI will do in minutes. Afterwards, an Angular 16 to 20 migration. Something that usually takes a good amount of time depending on the project's complexity, was resolved in a few minutes. Finally: a dashboard with the record count on the initial page.&lt;/p&gt;

&lt;p&gt;These are very common situations that we usually work on in our daily lives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P.S.:&lt;/strong&gt; I even requested a report and a graph, but it didn't work out, even though I only tried once. In defense of the Gemini CLI in this case, I should have had appropriate endpoints already created on the backend, something I didn't have and didn't want to create to not extend the video too much. Something else that worked very well was the migration to the new Angular &lt;code&gt;if/else&lt;/code&gt; structure, which I also ended up not showing. Updating this code in a large project would provide huge time savings.&lt;/p&gt;

&lt;h4&gt;
  
  
  "Human in the loop" always
&lt;/h4&gt;

&lt;p&gt;What many already know: You can't trust everything AI does.&lt;/p&gt;

&lt;p&gt;Certain refactorings I request from AIs, whether or not they are integrated into the IDE, completely break the logic. And I don't think agents will be able to solve even these more complex situations. A reality where you give an order and the system will be ready exactly the way you want does not exist. At least not yet...&lt;/p&gt;

&lt;p&gt;I tried to run these commands that I sent to the Gemini CLI from inside the Github Copilot Chat in VS Code and it got lost most of the time. It was noticeable that the Gemini CLI proved to be much more reliable, almost always fulfilling my order or at least implementing 80–90% of what I expected.&lt;/p&gt;

&lt;p&gt;In the end, a minimally experienced developer will always be necessary, as there will be adjustments to be made, technical debt to be dealt with, and the code must always be reviewed. AI still gets lost at various points. Hallucinations and inaccuracies can occur, but even so, the gain in productivity tends to be enormous due to the collaboration provided in this initial "boost."&lt;/p&gt;

&lt;h4&gt;
  
  
  Calm down, it’s not vibe coding!
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdidwxfg1qnlt0tlq693.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzdidwxfg1qnlt0tlq693.jpg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Vibe coding" has gotten a bad reputation as if it were about a person sitting down, asking the AI for the application, and it doing it while you have a coffee. But that's not how I understand the concept.&lt;/p&gt;

&lt;p&gt;“Vibe coding” has proven to be an incredibly useful tool for prototyping, generating repetitive code (boilerplate), and generally accelerating the workflow. It’s no longer just about writing lines of code, but about defining problems, guiding the AI, verifying the results, and, ultimately, being the guardian of the quality and security of the final product.”&lt;/p&gt;

&lt;h4&gt;
  
  
  Reflections and human/social impacts
&lt;/h4&gt;

&lt;p&gt;We are now entering a more philosophical area, so to speak. Well, I am not an expert on the subject. I've just been researching and trying to delve deeper into something that seems very revolutionary to me, largely because of the power it can have to change the way we work. But along with this come some very deep reflections.&lt;/p&gt;

&lt;p&gt;I understand that this can be frightening for some colleagues in the profession. Whether it's out of fear of losing their job to an AI, or out of resistance to changing the way they have worked their entire lives. Changing old habits is usually difficult.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sacrifice knowledge for speed:&lt;/strong&gt; It's good that the defect on line 25 was quickly resolved, but it's even better to find time to understand why.&lt;/p&gt;

&lt;p&gt;Sometimes it's inevitable, sometimes you really just need to solve that problem as quickly as possible, but the question remains: If I didn't type anything and let the AI do it for me, how much did I really learn from it? It’s always good to try to learn. This creates a risk of junior developers not evolving and remaining juniors forever.&lt;/p&gt;

&lt;p&gt;A developer does not learn by reading a book or watching a YouTube tutorial. They learn by typing. Just as you don't learn to dance, play soccer, or improve your physical condition by watching videos. There are situations where a code will be generated by the AI and only an experienced developer will notice that it is not the best solution. I think it is important to use the facilities that AI has provided us to enhance our learning.&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion: AI is not for replacing, but for empowering
&lt;/h4&gt;

&lt;p&gt;As young people say, I might be a little "emotional," my daughter has even said that I've become the "AI crazy guy"... lol. But I have more than 25 years in the profession, and I consider this moment a watershed. I see enormous potential here, which, if used well, can revolutionize our software development process.&lt;/p&gt;

&lt;p&gt;Note that my example application is very simple. Imagine what this will be able to do in 1 or 2 years, given how quickly these tools have been evolving. It's impressive to see what can already be done even though we are still in their initial versions.&lt;/p&gt;

&lt;p&gt;Productivity and time savings will evolve significantly. This is what I want most for myself and what companies also want for their staff.&lt;/p&gt;

&lt;p&gt;From everything I've been following, I can state that the use of these tools is already a reality in major development projects around the world.&lt;/p&gt;

&lt;p&gt;Demis Hassabis, neuroscientist, co-founder of Deepmind, and Nobel laureate in 2024, on programmers worried about their jobs: “For the next era, for the next 10 years, we will have people who embrace these technologies as one, which could lead to superhuman productivity. The best programmers will be even better, perhaps up to 10x better... The best programmers will be able to check if the code produced by the AI is truly good/adequate.”&lt;/p&gt;

</description>
      <category>gemini</category>
      <category>angular</category>
      <category>ai</category>
    </item>
    <item>
      <title>Chronology and Evolution of Angular through the Years - From v2 to v19</title>
      <dc:creator>Windson Mateus</dc:creator>
      <pubDate>Thu, 06 Mar 2025 21:36:48 +0000</pubDate>
      <link>https://forem.com/windmateus/chronology-and-evolution-of-angular-through-the-years-from-v2-to-v19-4obc</link>
      <guid>https://forem.com/windmateus/chronology-and-evolution-of-angular-through-the-years-from-v2-to-v19-4obc</guid>
      <description>&lt;p&gt;I’ve always been curious to check the evolution process of Angular over the years, from its early versions (Angular 2, not AngularJs) to the present ones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F16du63z5xaetkgnmlz12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F16du63z5xaetkgnmlz12.png" alt="angular logo" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hence, the motivation for this project, developed in my free time in recent months. Besides this post, I developed a small application, &lt;a href="https://github.com/windmateus/angular-evolution" rel="noopener noreferrer"&gt;the code of which you can check on my GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Moreover, it will serve as a way for me to always keep up and study the evolution of this technology that has been my main work in recent years.&lt;/p&gt;

&lt;p&gt;There are many versions, and in this post, I will talk about the advances present in each one and the most relevant changes in the application as I evolve the Angular versions, as well as the errors and solutions I applied. In each session, I will mention the release date of that Angular and the version of node in which I ran our sample application.&lt;/p&gt;

&lt;p&gt;In every new version, we will have something that &lt;strong&gt;optimizes the bundle&lt;/strong&gt;, making these smaller and thus applications loading faster. This is usually one of the main objectives of the Angular development team. Something that always occurs is also the adoption of a more recent and stable version of &lt;strong&gt;Typescript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each version of Angular has its own branch. The latest version in the repository (at the time of writing it is version 19) is also the master.&lt;/p&gt;

&lt;p&gt;I created the project in a WSL Ubuntu running on Windows 11. You can do this on Windows too, but in Linux I have been more productive, mainly because to switch between node versions I have been using &lt;a href="https://www.npmjs.com/package/n/v/5.0.1" rel="noopener noreferrer"&gt;&lt;strong&gt;"n"&lt;/strong&gt;&lt;/a&gt; (I think it's better than nvm).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fai19z8k776s8hvfp461t.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fai19z8k776s8hvfp461t.JPG" alt="sudo n running in terminal" width="666" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Initially, I started with Angular 15 and went back through the versions, but then I saw that it would be more interesting to start from the older versions to the newer ones to better understand the evolution process.&lt;/p&gt;

&lt;p&gt;I took the &lt;a href="https://angular.dev/reference/versions" rel="noopener noreferrer"&gt;compatibility table&lt;/a&gt; from the official documentation as a reference to know which &lt;strong&gt;node&lt;/strong&gt; is suitable for the &lt;strong&gt;Angular&lt;/strong&gt; version I’m working with. In practice, I noticed that there were some cases where the documentation guidelines didn’t work.&lt;/p&gt;

&lt;p&gt;In addition, the &lt;a href="https://angular.dev/update-guide" rel="noopener noreferrer"&gt;upgrade guide&lt;/a&gt; from one version to another is quite useful. Then it might be necessary to install new versions of some libraries manually and sometimes delete the node_modules folder before the process.&lt;/p&gt;

&lt;p&gt;As the Angular versions evolved, we also advanced the libraries like &lt;strong&gt;ngx-bootstrap&lt;/strong&gt;, &lt;strong&gt;rxjs&lt;/strong&gt;, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My goal was to develop a simple CRUD, a game registration. CRUDs are always present in a programmer's life. From there we can monitor what changes in the code as we evolve in the Angular versions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrcvab9rk6hv9zvh18sa.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrcvab9rk6hv9zvh18sa.JPG" alt="our example application, a game's CRUD" width="671" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To keep it simple, the &lt;strong&gt;backend&lt;/strong&gt; is a &lt;strong&gt;db.json&lt;/strong&gt; file running on a json-server.&lt;/p&gt;

&lt;p&gt;The listing screen is loaded via &lt;strong&gt;lazy loading&lt;/strong&gt; just to emphasize the importance of its use, but in practice, it would only make sense if there were several modules. In addition, I set a 0.7-second delay so that the loading gif could be observed.&lt;/p&gt;

&lt;p&gt;I thought about calculating the size of the builds for each version, but I gave up considering that in a very small application it wouldn't make much difference.&lt;/p&gt;

&lt;p&gt;Starting with Angular 7, we are using &lt;strong&gt;ngx-bootstrap&lt;/strong&gt;. To see its compatibility table with Angular, I &lt;a href="https://www.npmjs.com/package/ngx-bootstrap" rel="noopener noreferrer"&gt;consulted the documentation&lt;/a&gt;, in the Compatibility section.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Situations and Errors When Using Older NodeJs and Angular Versions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When running the application, the &lt;em&gt;"error:0308010C:digital envelope routines :: unsupported"&lt;/em&gt; or &lt;em&gt;"error:03000086 code: 'ERR_OSSL_EVP_UNSUPPORTED"&lt;/em&gt; may occur. This can be resolved by &lt;a href="https://stackoverflow.com/questions/69692842/error-message-error0308010cdigital-envelope-routinesunsupported" rel="noopener noreferrer"&gt;downgrading to a previous version of node&lt;/a&gt; or &lt;a href="https://stackoverflow.com/questions/75625650/how-to-fix-angular-error-opensslerrorstack-error03000086-code-err-ossl-ev" rel="noopener noreferrer"&gt;changing some of its and openssl's settings&lt;/a&gt;. Since in our case the idea is to run the application in an older version, updating the dependencies is not an option.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://stackoverflow.com/questions/63627932/angular-10-libraries-and-ivy-ngcc-compatibility" rel="noopener noreferrer"&gt;error &lt;/a&gt; "&lt;em&gt;This likely means that the library _&lt;/em&gt;_ which declares _&lt;em&gt;. has not been processed correctly by ngcc, or is not compatible with Angular Ivy&lt;/em&gt;" may keep appearing in VS Code, but the application works. I observed this from Angular 4 to 7.&lt;/p&gt;

&lt;p&gt;It is usually better to use the latest node to run &lt;strong&gt;ng update&lt;/strong&gt; (or &lt;strong&gt;npm install&lt;/strong&gt;) &lt;a href="https://stackoverflow.com/questions/68105687/failed-at-the-core-js-postinstall-script-error" rel="noopener noreferrer"&gt;as postinstall errors and others might occur&lt;/a&gt;, and then go back to the node corresponding to the Angular version in question to run the application.&lt;/p&gt;

&lt;p&gt;When following the process of advancing version by version via &lt;strong&gt;ng update&lt;/strong&gt;, it is quite common for it to only work after a &lt;strong&gt;--force&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 2, September 14, 2016&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first version of Angular as we really know it started at 2, which was created from scratch, taking only the old AngularJs, from 2010, as a basis. Google completely overhauled the architecture, preventing us from considering them the same language.&lt;/p&gt;

&lt;p&gt;There was no Angular 3, by decision of the development team, to avoid confusion with Angular Router, which was already at version 3 at the time.&lt;/p&gt;

&lt;p&gt;As you can see in the repository, we will only have versions of the sample application from Angular 4 onwards. I did not implement in Angular 2 simply because it was very difficult to set up an environment where the application would run, even using the oldest available node versions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 4, March 23, 2017 (node 8)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ddi-dev.com/blog/programming/what-new-angular4/" rel="noopener noreferrer"&gt;Angular 4 was the major update after Angular 2&lt;/a&gt;. From here, a new version was released regularly every 6 months.&lt;/p&gt;

&lt;p&gt;One of the main advances at the time was &lt;strong&gt;AOT&lt;/strong&gt; (Ahead of Time) and the &lt;strong&gt;View Engine&lt;/strong&gt;, aiming to make the bundle smaller and faster to load; the &lt;strong&gt;animations&lt;/strong&gt; package was extracted from &lt;strong&gt;angular/core&lt;/strong&gt; to its own package; source map generation was possible.&lt;/p&gt;

&lt;p&gt;About our application, it installed without errors with node 8 and not with 6, contrary to what the documentation stated.&lt;/p&gt;

&lt;p&gt;Errors that occurred: 1) "&lt;em&gt;Cannot read property 'config' of null&lt;/em&gt;": resolved by including the &lt;em&gt;.angular-cli.json&lt;/em&gt; file, &lt;a href="https://stackoverflow.com/questions/42835118/angular-2-cannot-read-property-config-of-null" rel="noopener noreferrer"&gt;following the structure suggested in this link&lt;/a&gt;; 2) "&lt;em&gt;Unknown browser query 'dead'&lt;/em&gt;": resolved by deleting the browserslist file in the src folder or editing it &lt;a href="https://stackoverflow.com/questions/51501138/browserslisterror-unknown-browser-query-dead" rel="noopener noreferrer"&gt;according to the link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Unlike &lt;strong&gt;rxjs&lt;/strong&gt; versions above 6, there is no EMPTY operator. So, &lt;a href="https://stackoverflow.com/questions/38548407/return-an-empty-observable" rel="noopener noreferrer"&gt;we use empty()&lt;/a&gt;. When using a service you still need to &lt;a href="https://stackoverflow.com/questions/30580083/angular-no-provider-for-nameservice" rel="noopener noreferrer"&gt;reference it in providers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Apparently, there was still no support for lazy loading, as it did not recognize the notation.&lt;/p&gt;

&lt;p&gt;At first, &lt;em&gt;ngx-bootstrap&lt;/em&gt; could not be used, so I opted for a javascript confirmation prompt as a substitute for its modal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 5, November 1, 2017 (node 8)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.telerik.com/blogs/angular-5-is-here" rel="noopener noreferrer"&gt;news in this version&lt;/a&gt; included: optimization and reduction in bundle size; AOT compilation enabled by default; service workers for PWA development.&lt;/p&gt;

&lt;p&gt;The upgrade process to Angular 5 worked &lt;a href="https://angular.dev/update-guide?v=4.2-5.2&amp;amp;l=1" rel="noopener noreferrer"&gt;according to the documentation guidelines&lt;/a&gt;. One strange thing that happened was an error importing the environment, necessary to define the base API URL. I had to invoke it with the relative path (".. /') for &lt;strong&gt;webpack&lt;/strong&gt; to understand and compile the application correctly. This was the only version where we had this problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 6, May 4, 2018 (node 8)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most important news in &lt;a href="https://blog.angular.dev/version-6-of-angular-now-available-cc56b0efa7a4" rel="noopener noreferrer"&gt;Angular 6 &lt;/a&gt;was the synchronization of &lt;em&gt;major versions&lt;/em&gt; of framework packages (angular/core, angular/common, angular/compiler, etc.), Angular CLI, and Angular Material+CDK to a single version 6.0.0. The first version of the important &lt;strong&gt;ng update&lt;/strong&gt; was launched here. Many new features in Angular Material. RxJS 6. LTS expansion to all major releases.&lt;/p&gt;

&lt;p&gt;From here, each major release would be supported for 18 months, with 6 months of active development followed by 12 months of critical bug fixes and security patches. First mention of _Ivy _for the future.&lt;/p&gt;

&lt;p&gt;In this version, it was possible to run our application with &lt;em&gt;app-routing/games-routing&lt;/em&gt; and &lt;strong&gt;lazy-loading&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 7, October 18, 2018 (node 8)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@zeljkoradic/angular-7-is-here-be4d138304c8" rel="noopener noreferrer"&gt;This new version of Angular&lt;/a&gt; shows good evolution in using &lt;strong&gt;ng update&lt;/strong&gt; for version evolution. Here, &lt;strong&gt;performance budgeting&lt;/strong&gt; is introduced, which allows increasing or reducing memory usage limits through settings in &lt;strong&gt;angular.json&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I &lt;a href="https://angular.dev/update-guide?v=6.1-7.2&amp;amp;l=1" rel="noopener noreferrer"&gt;followed the migration guidelines from 6 to 7&lt;/a&gt;, and it was much smoother than I imagined.&lt;/p&gt;

&lt;p&gt;About our app, it was already possible to start using &lt;strong&gt;ngx-bootstrap&lt;/strong&gt; in its version 5.6.0, and with that the &lt;em&gt;BsModal&lt;/em&gt; works from now on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 8, May 28, 2019 (node 12)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Contrary to what the official documentation points out, node 12 was needed to run &lt;strong&gt;npm install&lt;/strong&gt; on the application, and not ^10.9.0. Trying to migrate from angular 7, the &lt;a href="https://angular.dev/update-guide?v=7.2-8.2&amp;amp;l=1" rel="noopener noreferrer"&gt;command recommended by the documentation&lt;/a&gt; also didn't work, even running on node 10.9.&lt;/p&gt;

&lt;p&gt;Perhaps the most important news in&lt;a href="https://www.telerik.com/blogs/angular-8-is-here-whats-in-it-why-should-you-care" rel="noopener noreferrer"&gt; this version &lt;/a&gt; was &lt;em&gt;Differential Loading&lt;/em&gt; by default. It builds 2 bundles, generating a version of the application for modern browsers (ES2015) and another for old ones (ES5).&lt;/p&gt;

&lt;p&gt;There were changes in the notation of the important &lt;em&gt;Lazy Loading&lt;/em&gt; feature and the preview version of &lt;strong&gt;Ivy&lt;/strong&gt; was released.&lt;/p&gt;

&lt;p&gt;In our app, I removed &lt;em&gt;codelyzer _and _tslint&lt;/em&gt;, since we won’t use them anyway, and they would be deprecated in Angular 11 for &lt;strong&gt;eslint&lt;/strong&gt;. &lt;em&gt;Angular/http&lt;/em&gt; was removed in this version (it had been deprecated since Angular 5), now located inside &lt;em&gt;angular/commons&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 9, February 6, 2020 (node 12)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://auth0.com/blog/angular-9-whats-new/" rel="noopener noreferrer"&gt;Angular 9 was the most important update in 3 years&lt;/a&gt;. The &lt;a href="https://designtechworld.medium.com/ivy-compiler-vs-view-engine-b607c3897d3d" rel="noopener noreferrer"&gt;Ivy compiler was finally established&lt;/a&gt;, being much superior to the View Engine, with the mission of reducing bundle size, increasing build speed, and improving debugging; Enabled &lt;strong&gt;AOT&lt;/strong&gt; builds not only in production but also in other environments; A more informative &lt;strong&gt;ng update&lt;/strong&gt;, with very detailed reports of what is being done during the process, being able to even refactor the code if necessary; No more need for entryComponents to inform a component to the compiler, as Angular finds it on its own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ivy&lt;/strong&gt; has a huge focus on &lt;strong&gt;tree-shaking&lt;/strong&gt; processes. It involves the TypeScript compiler analyzing your code to identify which libraries are needed, eliminating any unused code. In Angular 9, &lt;strong&gt;Ivy&lt;/strong&gt; is the default rendering engine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tsh.io/blog/angular-size-comparison/" rel="noopener noreferrer"&gt;In this post&lt;/a&gt;, an interesting analysis is made of the improvements obtained in a migration from Angular 7 to 9.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwl124cn0ofc6pf6o52y.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwl124cn0ofc6pf6o52y.JPG" alt="Ivy size improvements" width="677" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In our app, when running &lt;strong&gt;ng update&lt;/strong&gt;, there was an error in the animations library (also resolved with &lt;strong&gt;--force&lt;/strong&gt;), and it ran successfully on the first attempt, although some errors occurred after the application started.&lt;/p&gt;

&lt;p&gt;The error "________ does not appear to be an NgModule class_" (CommonModule, among others) did not compromise the application. It seems to be a false negative that is sometimes reported by VS Code.&lt;/p&gt;

&lt;p&gt;The error "&lt;em&gt;Error TS1323: Dynamic import is only supported when the --module flag is commonjs or esNext&lt;/em&gt;" is resolved by &lt;a href="https://stackoverflow.com/questions/56375703/angular-8-lazy-loading-modules-error-ts1323-dynamic-import-is-only-supporte" rel="noopener noreferrer"&gt;setting "module": "esnext" in tsconfig.json&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;tsconfig.json&lt;/strong&gt;, &lt;strong&gt;Ivy&lt;/strong&gt; is enabled and the _target _is upgraded to es2015.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 10, June 24, 2020 (node 12)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From &lt;a href="https://blog.angular.dev/version-10-of-angular-now-available-78960babd41" rel="noopener noreferrer"&gt;this version&lt;/a&gt;, &lt;em&gt;warnings _are sent when your _build _contains _CommonJS&lt;/em&gt;, which can lead to heavier and slower applications. The message is "&lt;em&gt;CommonJS or AMD dependencies can cause optimization bailouts.&lt;/em&gt;" Very common to appear, I've encountered it several times in applications I've worked on.&lt;/p&gt;

&lt;p&gt;Option to create an application in &lt;strong&gt;strict TypeScript&lt;/strong&gt; mode, which helps with code maintenance, early bug detection, and allows the CLI to perform advanced optimizations on your application. The &lt;em&gt;default bundle budgets&lt;/em&gt; can be reduced by up to 75%.&lt;/p&gt;

&lt;p&gt;New projects disable ES5 _builds _by default. No more ESM5 or FESM5 bundles, saving 119MB of download and installation when running npm install for Angular packages and libraries. Support for IE 9 and 10 is finally discontinued.&lt;/p&gt;

&lt;p&gt;In our app, there were some libraries I had to manually analyze. I upgraded &lt;strong&gt;ngx-bootstrap&lt;/strong&gt; to v6, suitable for Angular 10. _Warning _for unused environment files, which made me delete the prod.&lt;/p&gt;

&lt;p&gt;We see &lt;strong&gt;ng update&lt;/strong&gt; running even more smoothly, with fewer problems. The _module _in &lt;strong&gt;tsconfig&lt;/strong&gt; was set to es2020. And it ran smoothly on the first try.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 11, November 11, 2020 (node 14)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Major highlights in &lt;a href="https://blog.angular.dev/version-11-of-angular-now-available-74721b7952f7" rel="noopener noreferrer"&gt;this version&lt;/a&gt;: Build report improvements, with more detailed information; &lt;em&gt;codelyzer _and _tslint&lt;/em&gt; were discontinued, and migration to &lt;strong&gt;eslint&lt;/strong&gt; is recommended; Support for IE9/IE10/IE mobile removed, only maintaining support for IE11.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04odfpzxk9r50g8oceiq.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04odfpzxk9r50g8oceiq.JPG" alt="better build report" width="601" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 12, May 12, 2021 (node 14)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.angular.dev/angular-v12-is-now-available-32ed51fbfd49" rel="noopener noreferrer"&gt;In this version&lt;/a&gt;, View Engine was definitively deprecated, aiming to converge the entire Angular ecosystem to &lt;strong&gt;Ivy&lt;/strong&gt;. &lt;em&gt;Protractor _will no longer be included in new projects, and should be replaced by other options like _Cypress, WebdriverIO&lt;/em&gt;, etc. The &lt;a href="https://dev.to/this-is-angular/nullish-coalescing-support-in-angular-template-48h6"&gt;nullish coalescing operator (??)&lt;/a&gt; can now be used in Angular templates. Support for Tailwind CSS. &lt;strong&gt;Strict&lt;/strong&gt; mode is now enabled by default in the CLI, which helps catch errors earlier in the development cycle. Support for &lt;em&gt;webpack 5&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;When migrating from version 11 to 12, the &lt;a href="https://stackoverflow.com/questions/68774226/an-unhandled-exception-occurred-the-buildoptimizer-option-cannot-be-used-with" rel="noopener noreferrer"&gt;error &lt;/a&gt;“&lt;em&gt;An unhandled exception occurred: The ‘buildOptimizer’ option cannot be used without ‘aot’&lt;/em&gt;” occurred. This was resolved by changing “aot” to “true” in angular.json.&lt;/p&gt;

&lt;p&gt;Additionally, after the migration, &lt;a href="https://stackoverflow.com/questions/67581454/receiving-unmatched-pseudo-class-lang-after-updating-angular" rel="noopener noreferrer"&gt;several warnings&lt;/a&gt; related to CSS started to appear. I &lt;a href="https://stackoverflow.com/questions/76798190/i-get-error-form-floatinglabel-in-ng-build" rel="noopener noreferrer"&gt;tried solving&lt;/a&gt; this by modifying angular.json, without success. Since it didn't affect the application, I decided to let it go. The &lt;em&gt;warning&lt;/em&gt; persisted until version 14. According &lt;a href="https://stackoverflow.com/questions/71231182/cannot-read-properties-of-undefined-reading-kind" rel="noopener noreferrer"&gt;to this post&lt;/a&gt;, the issue was resolved in Angular 15, apparently with the update to &lt;strong&gt;TypeScript 4.9.4&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Other issues were resolved after I started using &lt;em&gt;styles.scss&lt;/em&gt; instead of &lt;em&gt;styles.css&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 13, November 4, 2021 (node 14)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was a very important &lt;a href="https://blog.angular.dev/angular-v13-is-now-available-cce66f7bc296" rel="noopener noreferrer"&gt;version&lt;/a&gt;, one of the ones I worked on the most due to a complex migration project at my company, which I documented &lt;a href="https://medium.com/@windmateus/migra%C3%A7%C3%A3o-de-aplica%C3%A7%C3%B5es-para-angular-13-fa1f49beeb31" rel="noopener noreferrer"&gt;in this post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bootstrap&lt;/strong&gt; enters version 5 from this point. Support for IE11 has been removed. &lt;em&gt;Bundle _optimization is provided by removing IE-specific _polyfills _and _code paths&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The need for &lt;a href="https://v12.angular.io/guide/deployment#differential-loading" rel="noopener noreferrer"&gt;differential loading&lt;/a&gt; that existed until Angular 12 has also been removed. Now, only &lt;strong&gt;main.js&lt;/strong&gt; is created during the build, with no separate &lt;em&gt;main-es5.js&lt;/em&gt; or &lt;em&gt;main-es2015.js&lt;/em&gt; files, making the process faster.&lt;/p&gt;

&lt;p&gt;There was a conflict &lt;a href="https://stackoverflow.com/questions/67368552/jasmine-core-avoids-installing-angular-devkit-build-angular" rel="noopener noreferrer"&gt;error &lt;/a&gt; between Jasmine and &lt;em&gt;angular-devkit/build-angular&lt;/em&gt;, which I resolved by changing &lt;em&gt;jasmine-core&lt;/em&gt; from 3.4 to 3.8, as mentioned in the link.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 14, June 2, 2022 (node 14)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.angular.dev/angular-v14-is-now-available-391a6db736af" rel="noopener noreferrer"&gt;In this version&lt;/a&gt;, &lt;strong&gt;standalone components&lt;/strong&gt; arrived in the framework with &lt;em&gt;developer preview&lt;/em&gt; status: they are self-contained components that can be imported more directly, without declaring a module.&lt;/p&gt;

&lt;p&gt;The application migration process via &lt;strong&gt;ng update&lt;/strong&gt; was the most successful so far. No issues occurred. The TypeScript compilation &lt;em&gt;target _was updated to the new standard: &lt;strong&gt;ES2020&lt;/strong&gt;. The form classes have all been migrated to their new untyped versions (e.g., _FormGroup _-&amp;gt; _UntypedFormGroup&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 15, November 18, 2022 (node 16)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.angular.dev/angular-v15-is-now-available-df7be7f2f4c8" rel="noopener noreferrer"&gt;In Angular 15&lt;/a&gt;, &lt;em&gt;standalone APIs&lt;/em&gt; evolved from &lt;em&gt;developer preview&lt;/em&gt; to &lt;em&gt;stable&lt;/em&gt;, working correctly throughout the framework, and can be created directly via the Angular CLI. There is a new &lt;em&gt;standalone API&lt;/em&gt; for &lt;strong&gt;Router&lt;/strong&gt; and &lt;strong&gt;HttpClient&lt;/strong&gt;, which can reduce code size by up to 11% in the case of &lt;em&gt;Router&lt;/em&gt;. &lt;em&gt;Image Directive&lt;/em&gt; available for image optimization. Route guard code is now more reduced and optimized. Improved presentation and understanding of the &lt;em&gt;stacktrace&lt;/em&gt;. Refactoring of &lt;em&gt;Angular Material&lt;/em&gt;. CDK Listbox. Improvements in &lt;strong&gt;esbuild&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Regarding the application, as I mentioned at the beginning of the post, I started the project in this version. Since there were no updates from a previous version, the project might be a bit "cleaner" from here on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 16, May 3, 2023 (node 16)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.angular.dev/angular-v16-is-here-4d7a28ec680d" rel="noopener noreferrer"&gt;Angular 16&lt;/a&gt; was considered the biggest release since the creation of Angular. &lt;strong&gt;Reactivity was completely rethought&lt;/strong&gt;, with the introduction of &lt;strong&gt;Angular Signals&lt;/strong&gt;, making the desire to make zone.js optional a reality. &lt;strong&gt;SSR&lt;/strong&gt; (Server Side Rendering) and &lt;strong&gt;Hydration&lt;/strong&gt; features are introduced, bringing performance improvements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hydration&lt;/strong&gt; enables Angular to avoid re-rendering the application from scratch, resulting in about a 45% improvement in tests that were conducted. Support for unit testing with Jest and plans to gradually replace Karma with Web Test Runner. Support for &lt;strong&gt;TypeScript 5&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Angular Signals&lt;/strong&gt; library allows you to define reactive values and express dependencies between them. The rxjs-interop library allows for easy interoperability between &lt;strong&gt;Signals&lt;/strong&gt; and &lt;strong&gt;RxJS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://v17.angular.io/guide/standalone-migration" rel="noopener noreferrer"&gt;A guide and a new schematics tool have been created&lt;/a&gt; to practically transition applications from older versions to &lt;strong&gt;standalone APIs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 17, November 8, 2023 (node 20)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.angular.dev/introducing-angular-v17-4d7033312e4b" rel="noopener noreferrer"&gt;In this version&lt;/a&gt;, we have &lt;strong&gt;Deferrable views&lt;/strong&gt; (in developer preview), making the &lt;strong&gt;lazy loading&lt;/strong&gt; feature even more powerful, allowing loading on demand &lt;strong&gt;pieces&lt;/strong&gt; of a page.&lt;/p&gt;

&lt;p&gt;A new official documentation on &lt;a href="https://angular.dev/" rel="noopener noreferrer"&gt;angular.dev&lt;/a&gt;. Dependency injection debug in devtools. &lt;strong&gt;ng generate&lt;/strong&gt; creates standalone API components by default.&lt;/p&gt;

&lt;p&gt;One of the most important new features is the improved integrated control flow (still in developer preview). The use of &lt;em&gt;*ngIf&lt;/em&gt; and &lt;em&gt;*ngSwitch&lt;/em&gt;, for example, was a bit confusing. Now we have &lt;strong&gt;@if/&lt;a class="mentioned-user" href="https://dev.to/else"&gt;@else&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/switch"&gt;@switch&lt;/a&gt;/&lt;a class="mentioned-user" href="https://dev.to/case"&gt;@case&lt;/a&gt;&lt;/strong&gt;. In the case of &lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/for"&gt;@for&lt;/a&gt;&lt;/strong&gt;, its implementation is so much better optimized that it can be up to 90% faster in some situations compared to the old &lt;em&gt;*ngFor&lt;/em&gt;. For a more detailed understanding, I recommend &lt;a href="https://blog.angular-university.io/angular-if/" rel="noopener noreferrer"&gt;this article for if&lt;/a&gt; and &lt;a href="https://blog.angular-university.io/angular-for/" rel="noopener noreferrer"&gt;this one for for&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hydration&lt;/strong&gt; is now stable and enabled by default in all new applications using SSR. There are new lifecycle steps to handle these introduced features.&lt;/p&gt;

&lt;p&gt;The default build now uses &lt;strong&gt;Vite&lt;/strong&gt; and &lt;strong&gt;esbuild&lt;/strong&gt;. Improvements of up to 67% in build time and up to 87% with SSR/SSG have been reported. During development, the edit-refresh with &lt;strong&gt;ng serve&lt;/strong&gt; can be up to 80% faster. All compared to the old model that used webpack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 18, May 22, 2024 (node 20)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.angular.dev/angular-v18-is-now-available-e79d5ac0affe" rel="noopener noreferrer"&gt;The highlight of Angular 18&lt;/a&gt; is perhaps the enhancement of various features released in the last 3 releases.&lt;/p&gt;

&lt;p&gt;The release of the long-awaited &lt;strong&gt;zoneless change detection&lt;/strong&gt;, in experimental support, marks the &lt;strong&gt;end of using zone.js&lt;/strong&gt;, whose performance has always been questioned. By removing it from the application, the benefits include: better interoperability with other structures and micro-frontends; faster initial rendering and runtime; smaller bundle size and faster page loads; more readable &lt;strong&gt;stacktraces&lt;/strong&gt;; and simpler debugging.&lt;/p&gt;

&lt;p&gt;The use of &lt;strong&gt;signals&lt;/strong&gt; has evolved to the point that even &lt;a href="https://www.youtube.com/live/nIBseTi6RVk?si=gl5L40_GVWGyjZSP&amp;amp;t=2444" rel="noopener noreferrer"&gt;YouTube has adopted it&lt;/a&gt;. Improved debugging experience, making it possible to check the &lt;strong&gt;hydration&lt;/strong&gt; status through devtools.&lt;/p&gt;

&lt;p&gt;Material 3, &lt;strong&gt;deferrable views&lt;/strong&gt;, and built-in control flow are now &lt;strong&gt;stable&lt;/strong&gt; and have incorporated improvements. Server-side rendering enhancements. There are reports of companies that reduced the bundle size of one of their apps by 50% just by using the new &lt;a class="mentioned-user" href="https://dev.to/defer"&gt;@defer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When running &lt;strong&gt;ng update&lt;/strong&gt;, there is now an option to select “Migrate application projects to the new build system.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular 19, November 19, 2024 (node 20)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://blog.angular.dev/meet-angular-v19-7b29dfd05b84" rel="noopener noreferrer"&gt;this latest version of Angular&lt;/a&gt;, we have more news. In Developer preview: &lt;strong&gt;incremental hydration&lt;/strong&gt;, with support for the most demanding performance use cases; with the &lt;strong&gt;ServerRoute&lt;/strong&gt; interface, it is possible to control which routes render on the client, server, or during compilation and resolve route parameters during pre-rendering; new Schematics to keep you up to date with the latest best practices: inputs, outputs, queries, &lt;strong&gt;inject-based dependency injection&lt;/strong&gt;, and the new build system.&lt;/p&gt;

&lt;p&gt;Editing and updating code have been improved with *&lt;em&gt;HMR *&lt;/em&gt;(Hot Module Replacement). Enabled by default.&lt;/p&gt;

&lt;p&gt;Karma is being deprecated and in 2025 a standard test runner recommendation will be chosen. The Material 3 Theming API has evolved. New time-picker component. Report of unused imports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standalone components&lt;/strong&gt;, which were introduced in Angular 14, are now enabled by default. Directives, components, and pipes are updated during &lt;strong&gt;ng update&lt;/strong&gt;, which has a new migration option: provide-initializer.&lt;/p&gt;

&lt;p&gt;Our app continues migrating smoothly through its various ng updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trying to keep up with what has arrived and what's coming&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I would like to test several of these new features that I haven't had the opportunity to include in the sample application: Signals (zoneless app), Hydration, Standalone APIs, Deferrable views.&lt;/p&gt;

&lt;p&gt;Let's try in the future.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>angular</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Upgrading from Angular 8 to 13</title>
      <dc:creator>Windson Mateus</dc:creator>
      <pubDate>Sat, 30 Apr 2022 03:27:20 +0000</pubDate>
      <link>https://forem.com/windmateus/upgrading-from-angular-8-to-13-2lj1</link>
      <guid>https://forem.com/windmateus/upgrading-from-angular-8-to-13-2lj1</guid>
      <description>&lt;p&gt;In this post I will report what I learned in the migration of Angular applications v8 to v13.&lt;/p&gt;

&lt;p&gt;In addition, I will show you the most common errors that you may encounter in the process as well as their respective solutions, indicating the sources when appropriate.&lt;/p&gt;

&lt;p&gt;I spent 1 year and a half allocated in a division that worked with many applications and a suite of components built in Angular 8.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0v58j67qglhwlqcl5xx6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0v58j67qglhwlqcl5xx6.png" alt="angular" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the last 2 months of the last year we had meetings with the &lt;em&gt;frontend&lt;/em&gt; working group where the subject of angular application migration has always been talked.&lt;br&gt;
Considered a critical issue, especially when we remembered the risk of recent cases such as the &lt;a href="https://medium.com/geekculture/log4j-vulnerability-in-detail-and-the-bigger-picture-db49f749009" rel="noopener noreferrer"&gt;log4j vulnerability&lt;/a&gt; in Java and the discontinuity of the &lt;em&gt;faker&lt;/em&gt; library that affected the projects in &lt;a href="https://www.infoworld.com/article/3646609/angularjs-reaches-end-of-life.html" rel="noopener noreferrer"&gt;AngularJS, officially unsupported&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then came an opportunity to work with technical debt. When we did this work the Angular version was 13 and because &lt;a href="https://angular.io/guide/releases" rel="noopener noreferrer"&gt;Google only supports up to 2 previous versions&lt;/a&gt;, Angular 2 through 10 were no longer supported.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnomleuxxqeqp7pzelrm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnomleuxxqeqp7pzelrm.png" alt="angular support" width="800" height="828"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Initial guidelines
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8wcmurginap7mya72u5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8wcmurginap7mya72u5.png" alt="ng update keep calm" width="426" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We take the experience we had in migrating the component project in Angular 8 to 13. These are the possible migration approaches:&lt;/p&gt;

&lt;p&gt;1) Run a &lt;code&gt;ng update&lt;/code&gt; with each version because it is not possible through it to move from version 8 straight to 13, so you need to run this command to migrate from 8 to 9, from 9 to 10, and so on. The advantage is that it converts the code automatically, but the process of going through so many versions ends up being more costly and therefore not recommended in our case where there was a &lt;strong&gt;gap of 5 versions&lt;/strong&gt;. It may be the most appropriate option for future migrations.&lt;/p&gt;

&lt;p&gt;2) Create a new project in Angular 13 and copy the fonts from the old project into Angular 8. Then solve the problems as they arise. &lt;strong&gt;This approach has been adopted&lt;/strong&gt; for the migration of our component project and is what we recommend in this situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migration roadmap
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1) Install latest version of Angular&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install -g @angular/cli&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Create new project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ng new novo-projeto&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Copy fonts from old project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When copying the fonts it is recommended to keep the new &lt;strong&gt;package.json&lt;/strong&gt; that was generated to include and resolve the various dependencies on demand so that at the end of the process only the ones really needed are included, thus also meeting the best safety standards. Update angular versions of the &lt;strong&gt;package.json&lt;/strong&gt; of the subprojects (if any) as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) Modify tsconfig.lib.json settings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Update the tsconfig.lib.json files of the subprojects (if any) to align with the current tsconfig.json files&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"target": "es2017", &lt;br&gt;
"module": "es2020", &lt;br&gt;
"lib": [ &lt;br&gt;
   "es2020", &lt;br&gt;
   "dom" &lt;br&gt;
]&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Common configuration errors and solutions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;An unhandled exception occurred: The target entry-point "@novo-projeto" has missing dependencies: primeng/toast, primeng/button&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add the &lt;strong&gt;primeng&lt;/strong&gt; to the &lt;strong&gt;package.json&lt;/strong&gt;. This will be the most common error because it will occur for all various dependencies that have not yet been included, such as: &lt;em&gt;bootstrap&lt;/em&gt;, &lt;em&gt;ng-select&lt;/em&gt;, among others. &lt;strong&gt;Try to always define the version of the dependency corresponding to the current version of Angular in the project.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Other situations that can be solved in this way are errors of type:&lt;code&gt;Script file ____ does not exist.&lt;/code&gt; or &lt;code&gt;An unhandled occurred exception: ENOENT: no such file or directory, lstat ______&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;"ng build" for library fails with "does not support the 'build' target&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Copy &lt;strong&gt;angular.json&lt;/strong&gt; file from old project&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;npm WARN @angular-devkit/build-ng-packagr@0.1002.0 requires a peer of ng-packagr@^10.0.0 but none is installed. You must install peer dependencies yourself.&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;build-ng-packagr&lt;/strong&gt; has been &lt;a href="https://blog.ninja-squad.com/2020/09/03/angular-cli-10.1/#:~:text=The%20%40angular-devkit%2Fbuild,-angular:ng-packagr%20." rel="noopener noreferrer"&gt;discontinued&lt;/a&gt;. Remove the &lt;strong&gt;build-ng-packagr&lt;/strong&gt; from &lt;strong&gt;package.json&lt;/strong&gt; and modify the &lt;em&gt;tasks&lt;/em&gt; in &lt;strong&gt;angular.json&lt;/strong&gt;, so that where there is &lt;strong&gt;@angular-devkit/build-ng-packagr:build&lt;/strong&gt; replace for &lt;strong&gt;@angular-devkit/build-angular:ng-packagr&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Directory import '...\node_modules\@angular\compiler-cli\ngcc' is not supported resolving ES modules imported from ...\node_modules\ng-packagr\lib\utils\ng-compiler-cli.js. Did you mean to import @angular/compiler-cli/ngcc/index.js?&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resolves by modifying the version of &lt;strong&gt;ng-packagr&lt;/strong&gt; in the &lt;strong&gt;package.json&lt;/strong&gt; file, to one corresponding to the Angular version in the project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Cannot resolve type entity i5.Scrolling Module to symbol* ou *ERROR: The target entry-point "primeng/dropdown" has missing dependencies: @angular/cdk/scrolling&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is solved by adding the @angular/cdk to &lt;strong&gt;package.json&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ModuleError: Module Error (from ./node_modules/postcss-loader/dist/cjs.js) ... Can't resolve 'OpenSans-Regular.eot' in '...\dist\seus-components\css'
&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/69949917/why-do-i-get-this-error-postcss-is-not-recognized-as-an-internal-or-external" rel="noopener noreferrer"&gt;Install the postcss and postcss-cli&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install postcss postcss-cli&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Error: Module not found: Error: Can't resolve 'chart.js/auto'&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install &lt;strong&gt;chart&lt;/strong&gt; and &lt;strong&gt;ng2-charts&lt;/strong&gt;, which is a &lt;em&gt;wrapper&lt;/em&gt; of the first, running:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install --save ng2-charts&lt;/code&gt; and &lt;code&gt;npm install --save chart.js&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Common errors involving code change and solutions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Module&lt;/em&gt; errors of type: &lt;code&gt;'"primeng"' has no exported member 'ConfirmDialogModule'&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In earlier versions of &lt;strong&gt;primeng&lt;/strong&gt; imports were like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import { Checkbox, MessageService, ConfirmDialogModule } from 'primeng/primeng';&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;References are now more specific, so they need to be corrected:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import { Checkbox } from 'primeng/checkbox';&lt;br&gt;
import { MessageService } from 'primeng/api';&lt;br&gt;
import { ConfirmDialogModule } from 'primeng/confirmdialog';&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error TS1323: Dynamic imports are only supported when the '--module' flag is set to 'es2020'&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/56375703/angular-8-lazy-loading-modules-error-ts1323-dynamic-import-is-only-supporte" rel="noopener noreferrer"&gt;In order to support dynamic imports&lt;/a&gt;, add the line to &lt;strong&gt;tsconfig.json&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"module": "esnext",&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When working with &lt;strong&gt;observables&lt;/strong&gt;, error &lt;code&gt;Error TS2554: Expected 1 arguments, but got 0&lt;/code&gt; may arise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/68590899/rxjs-7-update-subject-expected-1-arguments-but-got-0" rel="noopener noreferrer"&gt;Occurs after migration to rxjs 7&lt;/a&gt;. It can be solved by passing a &lt;em&gt;fake&lt;/em&gt; value:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;this.subject.next("");&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Error: Module not found: Resolving to directories is not possible with the exports field (request was ./)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/69446231/module-not-found-error-resolving-to-directories-is-not-possible-with-the-expor" rel="noopener noreferrer"&gt;It usually occurs after migration to Angular 12&lt;/a&gt;. It is solved by removing the "/" at the end of &lt;strong&gt;imports&lt;/strong&gt; or replacement of double quotes by single. Example:&lt;/p&gt;

&lt;p&gt;Before: &lt;code&gt;import { MsgCenterModule } from '@seu-componente/etc-client/';&lt;/code&gt;&lt;br&gt;
After: &lt;code&gt;import { MsgCenterModule } from '@seu-componente/etc-client';&lt;/code&gt;&lt;br&gt;
Before: &lt;code&gt;import { ABCEnum, XYZEnum } from "../../tabela.constants";&lt;/code&gt;&lt;br&gt;
After: &lt;code&gt;import { ABCEnum, XYZEnum } from '../../tabela.constants';&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Error of the type: &lt;code&gt;Module not found: Error: Can't solve 'dayjs' / Error: Module not found: Error: Can't solve 'inputmask'&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Installing this library because even though it is not directly used in the application, it is necessary in some cases because it is referenced by the component used:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install dayjs --save&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install inputmask --save&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Type error: Object is possibly 'null'. TS2531 for window.document&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://stackoverflow.com/questions/55588968/type-error-object-is-possibly-null-ts2531-for-window-document" rel="noopener noreferrer"&gt;typescript compiler is indicating&lt;/a&gt; that &lt;code&gt;window.document.getElementById('content')&lt;/code&gt; may return NULL. Because it is a migrated code that already worked previously just add the ! to code: &lt;code&gt;document.getElementById('content')!. innerHTML = '';&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error NG8002: Can't bind to 'minWidth' since it isn't a known property of 'p-dialog'.&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/primefaces/primeng/issues/8551" rel="noopener noreferrer"&gt;From primeng 9 some properties must be set in style&lt;/a&gt;. Therefore, in html, where it has &lt;code&gt;[width]="600" [minWidth]="200"&lt;/code&gt; change to &lt;code&gt;[style]="{width: '600px', minWidth: '200px'}"&lt;/code&gt;. Look at the brackets &lt;a href="https://stackoverflow.com/questions/55867116/failed-to-set-an-indexed-property-on-cssstyledeclaration-index-property-sette" rel="noopener noreferrer"&gt;or a CSS-style setar error&lt;/a&gt; occurs&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error TS7006: Parameter 'perfis' implicitly has an 'any' type&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/43064221/typescript-ts7006-parameter-xxx-implicitly-has-an-any-type" rel="noopener noreferrer"&gt;This is because&lt;/a&gt; variables now need to have some type defined, so it is necessary at all points in the code to set them to &lt;strong&gt;any&lt;/strong&gt; or for a more specific type. A sometimes pointed solution is to set &lt;strong&gt;"noImplicitAny"&lt;/strong&gt; to &lt;strong&gt;false&lt;/strong&gt; in the &lt;strong&gt;tsconfig.json&lt;/strong&gt;, but &lt;strong&gt;it is not recommended&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error TS2564: Property 'titulo' has no initializer and is not definitely assigned in the constructor
&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Starting with version 2.7 the **typescript **compiler &lt;a href="https://stackoverflow.com/questions/49699067/property-has-no-initializer-and-is-not-definitely-assigned-in-the-construc" rel="noopener noreferrer"&gt;requires that the property/variable be initialized&lt;/a&gt;. To solve there are &lt;a href="https://mariusschulz.com/blog/strict-property-initialization-in-typescript" rel="noopener noreferrer"&gt;several approaches&lt;/a&gt; but we chose to add the "!" in the definition of the variable:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;public container!: ViewContainerRef;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We did this because we have assurances that this is initialized because it worked in the previous project in Angular 8, since the previous code ran without errors at runtime.&lt;/p&gt;

&lt;p&gt;Note: In &lt;strong&gt;tsconfig.json&lt;/strong&gt;, &lt;strong&gt;compilerOptions&lt;/strong&gt; &lt;a href="https://www.typescriptlang.org/tsconfig#strictPropertyInitialization" rel="noopener noreferrer"&gt;can be defined as "strictPropertyInitialization": false&lt;/a&gt;, to ignore these errors and speed up this phase of migration, but &lt;strong&gt;it is recommended to go back to true later&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error TS2322: Type 'string | null' is not assignable to type 'string | undefined'.&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Very common when setting &lt;a href="https://stackoverflow.com/questions/54496398/typescript-type-string-undefined-is-not-assignable-to-type-string" rel="noopener noreferrer"&gt;an interface property as optional&lt;/a&gt;, solved with "!" just like the previous error.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error TS2322: Type 'Boolean' is not assignable to type 'boolean' ... 'boolean' is a primitive, but 'Boolean' is a wrapper object. Prefer using 'boolean' when possible&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Newer versions of &lt;strong&gt;typescript&lt;/strong&gt; are more rigid. In this case you will need to modify the code to use the &lt;strong&gt;boolean&lt;/strong&gt; primitive type.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error NG3001: Unsupported private class MsgCenterComponent. This class is visible to consumers via SistemaClientModule -&amp;gt; MsgCenterComponent, but is not exported from the top-level library entrypoint.&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/60121962/this-class-is-visible-to-consumers-via-somemodule-somecomponent-but-is-not-e" rel="noopener noreferrer"&gt;It usually happens from version 9 of Angular&lt;/a&gt;. Add to the &lt;strong&gt;public_api.ts&lt;/strong&gt; the line corresponding to the class in question, in this example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export * from './lib/msg-center/msg-center.component';&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error TS2314: Generic type 'ModuleWithProviders&amp;lt;T&amp;gt;' requires 1 type argument(s)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Change the code &lt;a href="https://stackoverflow.com/questions/62755093/angular-error-generic-type-modulewithproviderst-requires-1-type-arguments" rel="noopener noreferrer"&gt;as follows&lt;/a&gt;, in this example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;static forRoot(): ModuleWithProviders&amp;lt;XYZClientModule&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error TS7030: Not all code paths return a value.&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ensure that a value is returned in the code in question. It usually occurs in more extensive &lt;strong&gt;if&lt;/strong&gt; clauses.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error TS2339: Property 'throw' does not exist on type 'typeof Observable'&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/68655492/throwerrorerror-is-now-deprecated-but-there-is-no-new-errorhttperrorresponse" rel="noopener noreferrer"&gt;Change the call to:&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;return throwError(() =&amp;gt; response);&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error TS1192: Module '".../node_modules/@types/uuid/index"' has no default export.&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install dependency: &lt;code&gt;npm i --save-dev @types/uuid&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And modify the call in the code to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import * as uuid from 'uuid';&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'. No index signature with a parameter of type 'string' was found on type '{}'&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You need to define the type of index that the object has by modifying the code to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pagesStatus: {[index: string]:any} = {}&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error TS2322: Type 'string' is not assignable to type 'number'&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It can occur in &lt;strong&gt;html tag&lt;/strong&gt; attributes. For example, where there were:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;p-fileUpload mode="advanced" name="demo[]" maxFileSize=1000000 multiple=true chooseLabel="Buscar arquivo" (onUpload)="onUpload($event)"&amp;gt;&amp;lt;/p-fileUpload&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Place the brackets:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;p-fileUpload mode="advanced" name="demo[]" [maxFileSize]="1000000" [multiple]="true" chooseLabel="Buscar arquivo" (onUpload)="onUpload($event)"&amp;gt;&amp;lt;/p-fileUpload&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  After migration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/61541876/why-entrycomponents-is-not-necessary-anymore-in-angular-9-ivy-compiler" rel="noopener noreferrer"&gt;Code entryComponents Removal&lt;/a&gt;: From Angular 13 on, the use of &lt;strong&gt;entryComponents&lt;/strong&gt; is no longer required&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove &lt;strong&gt;[responsive]&lt;/strong&gt; attributes from &lt;strong&gt;p-dialog&lt;/strong&gt;. In the new version such components are fully responsive and so the attribute has been discontinued.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>angular</category>
      <category>typescript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
