跳转到主要内容

Everything you need to know about Angular Universal, the Angular-based competitor to Next.js.

Next.js is one of the most popular full-stack frameworks available, and it has rapidly become one of the most adopted technologies when it comes to web development.

In addition to adding SSR (Server-Side Rendering) capabilities to React, Next.js provides a complete toolset for building fast, efficient, high-performance websites with low load times.

In this article, we will provide an overview of Angular Universal, which is the closest equivalent to Next.js in the Angular ecosystem.

What is Next.js?

As stated in the official documentation, Next.js is a flexible JavaScript framework based on React that provides everything you need to create fast web applications. With Next.js, much of the logic to render the application is moved from the browser to the server. This greatly reduces the amount of client-side rendering as compared to React, which makes Next.js apps SEO-friendly.

Next.js apps are complete web applications, which means you can deploy them anywhere that the Node.js runtime is supported. This is pretty compelling for JavaScript developers who are looking for a consistent set of tools across both client-side and server-side development. Additionally, Next.js can take advantage of the thousands of npm libraries available, making it a cost and time-effective solution.

What is Angular?

Angular is a component-based framework for building scalable web applications. Specifically, Angular is a collection of well-integrated libraries providing you with several features, including rendering, forms management, routing, data binding, dependency injection, testing/mocking capabilities, and an event system. Therefore, imagine Angular as a “batteries included” framework coming with a suite of tools for developing, updating, building, and testing code.

Angular is built on TypeScript and, like React, is used to build SPAs (Single Page Applications) that render client-side. The main difference between React and Angular is that React is a library, while Angular is a fully-featured framework. In other words, Angular is an MVC framework that does not need any additional libraries to be complete. On the other hand, React is just a library and requires other libraries to become complete. So, you need external dependencies to achieve your goals easily.

What Do Next.js and Angular Have in Common?

Next.js and Angular are technologies with different goals. However, there are a few common elements between the two frameworks. Let’s now have a look at the three most important ones.

  • They are both JavaScript-based: Next.js has been developed in JavaScript and Angular in TypeScript. TypeScript is a programming language built on top of JavaScript, and the two languages are fully interoperable. Therefore, they both are JavaScript-based and support JavaScript and TypeScript development, as well as all npm libraries built with one of the two languages.
  • They both support client-side rendering: Even though Next.js was developed with server-side rendering in mind, it also supports client-side rendering. This means that you can avoid pre-rendering some parts of a page and then use JavaScript to populate them in the browser. It also means that you can technically use Next.js to build a SPA, although it is not the goal behind the framework, and you would end up using only React and no Next.js features. Still, both Angular and Next.js can be used as client-side rendering technologies.
  • They are both open-source solutions: Next.js and Angular are free, open-source frameworks. This means that their code is backed by the community and everyone can fork it or simply have a look at their repos. Both are hosted on GitHub and have more than 80k stars. You can find the Angular repo on GitHub here, and the Next.js repo on GitHub here.

How Next.js Differs From Angular

Even though Angular and Next.js have a few things in common, they were developed with two distinct goals in mind, and they are inherently different. Several differences between the two frameworks could be mentioned, but let’s focus on the three most relevant ones:

  • Next.js is full-stack, while Angular is frontend-only: Next.js and Angular are on two different levels. Next.js is a framework built on top of React, which uses it as a frontend technology while providing the developer with backend features. In other terms, Next.js is a full-stack framework. Alternately, Angular is a React equivalent and the two JavaScript-based technologies are on the same level. Put simply: Angular and React only equip developers with client-side functionality, and they are both frontend-only technologies.
  • As opposed to Angular, Next.js can be used for API development: Since Next.js is based on Node.js, it also supports API development. This means that you can use Next.js to create a backend application that connects to a database to expose data through APIs. That would not be possible in Angular, which can only be used to call APIs and consume the data retrieved through them.
  • Next.js is for static generation server-side rendering, while Angular is for client-side rendering: Although you can technically use Next.js for client-side rendering, this is not its main purpose. Next.js was designed with multipage application and website development in mind, and it should be used for its static generation and server-side rendering capabilities. Quite the opposite, Angular was designed for building SPAs, and it provides developers with what they need to deal with client-side rendering and build a SPA easily and effortlessly.

What is important to understand here is that Angular cannot be used for server-side rendering. This raises a question: in the same way that Next.js is based on React and allows server-side rendering, is there something similar based on Angular? The answer is Angular Universal!

Angular Universal: an Alternative to Next.js Based on Angular

The Angular Universal project is a project to expand on the core APIs from Angular created by Patrick Stapleton and Jeff Whelpley. Unlike Angular itself, Angular Universal is a community driven project and it is not developed and maintained by Google. This does not mean that it is not a reliable technology. In fact, Angular Universal has become so popular that it is now the officially supported way to render Angular applications on the server.

In other terms, Angular Universal enables server-side rendering while using Angular. Specifically, Angular Universal executes on a server and is responsible for generating static Angular application pages that will be later sent and run by the client.

Angular Universal’s main features are:

  • it supports server-side rendering
  • it allows you to pre-render static pages
  • it offers you everything you need to optimize for SEO
  • it supports API development
  • it allows you to serve static files safely

Now, let’s learn how to convert an existing Angular project into an Angular Universal app.

From Angular to Angular Universal If you already have an Angular >= 7 application, enter the application directory, and launch the following command:

ng add @nguniversal/express-engine

This will make several changes to your app, adding and updating some files to make your application server-ready. Your Angular app is now an Angular Universal app.

Then, you can start rendering your Angular Universal application locally with the command below:

npm run dev:ssr

Now, visit https://localhost:4200 in your browser, and you should be able to see your Angular Universal application in action.

As you can see, moving from Angular to Angular Universal only takes one command and a couple of minutes.

Angular Universal vs. Next.js: Main Differences

Let’s delve deeper into the main differences between Angular Universal and Next.js.

  • They support incremental static regeneration differently: Incremental static regeneration (ISR) allows you to statically regenerate a particular page only when required. This allows you to avoid rebuilding the entire website every time a page changes. Next.js natively supports ISR through getStaticProps() and its revalidate option. On the contrary, at the time of writing, Angular Universal does not support ISR natively. You can achieve it with Angular Universal as explained here, but this involves custom logic
  • Next.js comes with several optimizations: One of the main reasons Next.js is so popular is that it natively comes with features like image optimizationscript handlingfont optimization, and more. These empower you to build optimized websites effortlessly, and help you achieve a better SEO score. On the other hand, not all hosting providers support these features, and switching a Next.js app from one provider to another may be problematic. Instead, Angular Universal follows a different approach and does not offer any built-in optimization. This simplified approach allows for fewer roadblocks, but it can also be an inconvenience for anyone used to relying on specialized native features.
  • They evolve at two different paces: Angular Universal is part of Angular, which means that it follows the Angular development roadmap. Angular has a slow development timeline when compared to Next.js, which allows developers to always be dealing with a reliable and stable framework. It also means that the community does not have to constantly catch up. In contrast, Next.js follows an opposite approach, with rapid development and frequent releases. Consequently, the Next.js documentation may not always be up-to-date.
  • They handle caching on static files differently: Both Next.js and Angular Universal allow you to serve static files safely and easily. In Next.js you have to place them in the /public folder, while in Angular Universal in the /dist folder. Since these files will not change, they should be served with a caching policy. Next.js give you the ability to handle a single caching policy for all static files, unless you define a custom header for each file. On the contrary, Angular Universal allows you to effortlessly define a custom caching policy for each file thanks to the serve.use() function.

Conclusion

In this article, you learned what Angular Universal is, why you need it to server-side render or statically generate Angular applications, and what differences it has when compared to Next.js. Angular Universal is a powerful tool that comes with all the benefits of server-side rendering, such as making the web crawlers' job easier when it comes to SEO, improving performance on mobile devices, and showing the first page more quickly. Turning an existing Angular application into an Angular Universal project takes only one command, making Angular Universal the perfect alternative to Next.js for Angular.

标签