Recently, I needed to create a web app for a company outside of the technology field. The company had never built custom software before.
A basic example of _app.js
As always, it was important for me to make a wise technology decision.
High Community Support
That allows me to empower my team and client to have an efficient and productive project.
Create a Next.js App
I ended up choosing Next.js, using a similar framework to the methodology John Fisher describes here.
Although the Next.js framework was new to me, I found a lot of things to like.
I was consistently able to find help online with problems and bugs I encountered.
I also found great guides to things like setting up a linter, testing framework, and mocking tools. In particular, I found a lot of guides for using Google Firebase Authentication and Google Analytics, both used heavily in my project.
Also, I noticed that because Next.js is rather new, I was unlikely to stumble upon really out-of-date solutions that no longer worked.
How many times have you submitted two pull requests to ship one user feature?
You then go on to see the front-end builds not working as expected because the API doesn’t exist in the deployed branch of the API. Sure, there are plenty of technical solutions to that, like deploying both artifacts in one pipeline.
Using _app.js with Auth Provider
But, those solutions take time to create and, in my experience, complicate the development process. In Next.js, your React code lives in the same repo as the API code. For me, this made it easy to concurrently develop front-end features while I created the API endpoints needed to support those.
On my small, poly-skilled full-stack team, this worked really well. I was able to deploy our app on Vercel and set up a full CI pipeline with lining and tests in less than 15 minutes.
This also included connecting our GitHub account. That meant pull requests contained build status and preview deployments so that our designer and other stakeholders could validate features. I found this a huge time saving and was really happy with the ease of using Vercel. In my experience, there are a lot of high-quality developers who would like to work in React.
Ease of Tracking Changes
Further, the Mono-repo aspect is particularly appealing to developers who want to work in a poly-skilled full-stack team. That’s how my team works, so aligning our technology with the values of our team makes it easier to retain and recruit more developers who want to work like that.
To build a complete web application with React from scratch, there are many important details you need to consider:.
Using _app.js with a custom layout
Code has to be bundled using a bundler like webpack and transformed using a compiler like Babel. You need to do production optimizations such as code splitting.
Using _app.js with Providers
You might want to statically pre-render some pages for performance and SEO. You might also want to use server-side rendering or client-side rendering.
You might have to write some server-side code to connect your React app to your data store. A framework can solve these problems.
But such a framework must have the right level of abstraction — otherwise it won’t be very useful.
It also needs to have great "Developer Experience", ensuring you and your team have an amazing experience while writing code.
Attracging Top Developer Talent
Enter Next.js, the React Framework.
Next.js provides a solution to all of the above problems.
But more importantly, it puts you and your team in the pit of success when building React applications. Next.js aims to have best-in-class developer experience and many built-in features, such as:. An intuitive page-based routing system (with support for dynamic routes).
Support for Deployment on Vercel
Pre-rendering, both static generation (SSG) and server-side rendering (SSR) are supported on a per-page basis. Automatic code splitting for faster page loads. Client-side routing with optimized prefetching.
Built-in CSS and Sass support, and support for any CSS-in-JS library. Development environment with Fast Refresh support. API routes to build API endpoints with Serverless Functions.
Fully extendable. Next.js is used in tens of thousands of production-facing websites and web applications, including many of the world's largest brands.
This free interactive course will guide you through how to get started with Next.js. In this tutorial, you’ll learn Next.js basics by creating a very simple blog app.
Here’s an example of the final result:. https://next-learn-starter.vercel.app (source).
- If you’re looking for documentation instead, visit the Next.js documentation.
- If you have questions about anything related to Next.js or this course, you're welcome to ask our community on Discord.
- Let’s get started!
You can also ask the community onGitHub Discussions. The easiest way to get started with Next.js is by using create-next-app.
Join the Conversation
This CLI tool enables you to quickly start building a new Next.js application, with everything set up for you.
You can create a new app using the default Next.js template, or by using one of the official Next.js examples.
To get started, use the following command:. You can create a TypeScript project with the --ts, --typescript flag:. create-next-app comes with the following options:.
--ts, --typescript - Initialize as a TypeScript project. -e, --example [name]|[github-url] - An example to bootstrap the app with.
You can use an example name from the Next.js repo or a GitHub URL. The URL can use any branch and/or subdirectory.
- --example-path [path-to-example] - In a rare case, your GitHub URL might contain a branch name with a slash (e.g.
- bug/fix-1) and the path to the example (e.g. In this case, you must specify the path to the example separately: --example-path foo/bar.
- --use-npm - Explicitly tell the CLI to bootstrap the app using npm. To bootstrap using yarn we recommend running yarn create next-app.
- --use-pnpm - Explicitly tell the CLI to bootstrap the app using pnpm.
- To bootstrap using yarn we recommend running yarn create next-app.
- create-next-app allows you to create a new Next.js app within seconds.
About This Tutorial
It is officially maintained by the creators of Next.js, and includes a number of benefits:. Interactive Experience: Running npx [email protected] (with no arguments) launches an interactive experience that guides you through setting up a project.
Zero Dependencies: Initializing a project is as quick as one second.
Create Next App has zero dependencies. Offline Support: Create Next App will automatically detect if you're offline and bootstrap your project using your local package cache.
Support for Examples: Create Next App can bootstrap your application using an example from the Next.js examples collection (e.g.
npx create-next-app --example api-routes). Tested: The package is part of the Next.js monorepo and tested using the same integration test suite as Next.js itself, ensuring it works as expected with every release. For more information on what to do next, we recommend the following sections:.
Welcome to the Next.js documentation! If you're new to Next.js, we recommend starting with the learn course.
The interactive course with quizzes will guide you through everything you need to know to use Next.js.
If you have questions about anything related to Next.js, you're always welcome to ask our community on GitHub Discussions. Node.js 12.22.0 or later. MacOS, Windows (including WSL), and Linux are supported. We recommend creating a new Next.js app using create-next-app, which sets up everything automatically for you.
To create a project, run:. If you want to start with a TypeScript project you can use the --typescript flag:.
After the installation is complete:. Run npm run dev or yarn dev or pnpm dev to start the development server on http://localhost:3000.
Visit http://localhost:3000 to view your application.
Edit pages/index.js and see the updated result in your browser. For more information on how to use create-next-app, you can review the create-next-app documentation. Install next, react and react-dom in your project:. Open package.json and add the following scripts:.
Why use Create Next App?
These scripts refer to the different stages of developing an application:.
dev - Runs next dev to start Next.js in development mode. build - Runs next build to build the application for production usage.
start - Runs next start to start a Next.js production server. lint - Runs next lint to set up Next.js' built-in ESLint configuration.
Create two directories pages and public at the root of your application:.
pages - Associated with a route based on their file name. For example pages/about.js is mapped to /about. public - Stores static assets such as images, fonts, etc.
Files inside public directory can then be referenced by your code starting from the base URL (/). Next.js is built around the concept of pages.
A page is a React Component exported from a .js, .jsx, .ts, or .tsx file in the pages directory. You can even add dynamic route parameters with the filename.
Inside the pages directory add the index.js file to get started. This is the page that is rendered when the user visits the root of your application.
Populate pages/index.js with the following contents:.
After the set up is complete:. Run npm run dev or yarn dev or pnpm dev to start the development server on http://localhost:3000. Visit http://localhost:3000 to view your application.
Edit pages/index.js and see the updated result in your browser.
- So far, we get:. Automatic compilation and bundling.
Static generation and server-side rendering of pages/. Static file serving through public/ which is mapped to the base URL (/).
- In addition, any Next.js application is ready for production from the start.
- Read more in our Deployment documentation.
- For more information on what to do next, we recommend the following sections:.
Basic Features: Pages. Next.js uses the App component to initialize pages.