This article will guide you to build a static blog framework using Next.js, with design and structure inspired by Jekyll. Jekyll is known for its ease of access and high controllability, and this article aims to take advantage of Next.js and React to provide a new static blog building solution. Next.js is based on the file system and simplifies the construction process of static websites.
A typical Jekyll blog directory structure is as follows:
<code>. ├─── _posts/ ...Markdown 格式的博文├─── _layouts/ ...不同頁面的布局├─── _includes/ ...可復(fù)用的組件├─── index.md ...主頁└─── config.yml ...博客配置</code>
Our framework will follow this directory structure as much as possible to facilitate migration of blogs from Jekyll, simply reuse posts and configurations.
If you are not familiar with Jekyll, it is a static site generator that converts plain text into static websites and blogs. Please refer to the Jekyll Quick Start Guide for details.
This article assumes that you have the basics of React. If not, refer to the React Getting Started Guide.
Install
Next.js is based on React and written in Node.js. Therefore, you need to install npm before adding Next.js, React, and React-DOM.
<code>mkdir nextjs-blog && cd $_ npm init -y npm install next react react-dom --save</code>
In order to run the Next.js script on the command line, we need to add the next command to the scripts section of package.json.
<code>"scripts": { "dev": "next" }</code>
Now, run the npm run dev
command for the first time and see what happens.
<code>$ npm run dev > [email protected] dev /~user/nextjs-blog > next ready - started server on http://m.miracleart.cn/link/4a914e5c38172ae9b61780ffbd0b2f90 Error: > Couldn't find a `pages` directory. Please create one under the project root</code>
The compiler prompts that the pages directory under the project root directory is missing. We will learn about the concept of pages in the next section.
pages concept
Next.js is built based on the pages concept. Each page is a React component (.js or .jsx) that is mapped to the route based on the file name. For example:
<code> 路由---- ----- /pages/about.js /about /pages/projects/work1.js /projects/work1 /pages/index.js /</code>
Let's create the pages directory in the project root directory and populate the first page index.js with the basic React component.
<code>// pages/index.js export default function Blog() { return</code> Welcome to Next.js blog }
Run npm run dev
again to start the server and visit http://m.miracleart.cn/link/4a914e5c38172ae9b61780ffbd0b2f90 in your browser to view your blog.
Out of the box, we get:
- Hot reload, no need to refresh the browser for every code change.
- /pages/** Static generation of all pages in the directory.
- /public/** static file service for resources in the directory.
- 404 Error page.
Visit any path on localhost to see the actual effect of the 404 page. If you need to customize the 404 page, please refer to the Next.js documentation.
Dynamic page
Static routing pages are used to build home pages, about pages, etc. However, in order to build all blog posts dynamically, we will use Next.js' dynamic routing functionality. For example:
<code> 路由---- ----- /pages/posts/[slug].js /posts/1 /posts/abc /posts/hello-world</code>
Any routes, such as /posts/1, /posts/abc, etc., will match /posts/[slug].js, and the slug parameter will be sent to the page as a query parameter. This is especially useful for our blog posts, because we don't want to create a file for each blog post; instead, we can dynamically pass slugs to render the corresponding blog post.
(The following content is omitted. Because the length of the article is too long, the original text will remain unchanged, and the remaining parts will be simplified and the pictures will be retained)
Blog API, Includes, Layouts, Homepage, Blog Page, Production Environment Deployment, Improvement Suggestions
The subsequent part of the article details how to build a blog API (get all blog posts, get individual blog posts, and configure parsing), create reusable components (Includes), design page layout (Layouts), implement homepage blog post lists and individual blog post pages, as well as the final production environment deployment and some improvement suggestions, such as pagination, syntax highlighting, article classification labels and style beautification, etc. The implementation details of these parts are based on the features and functionality of Next.js and make full use of its static site generation capabilities.
The above is the detailed content of Building a Blog with Next.js. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

CSS blocks page rendering because browsers view inline and external CSS as key resources by default, especially with imported stylesheets, header large amounts of inline CSS, and unoptimized media query styles. 1. Extract critical CSS and embed it into HTML; 2. Delay loading non-critical CSS through JavaScript; 3. Use media attributes to optimize loading such as print styles; 4. Compress and merge CSS to reduce requests. It is recommended to use tools to extract key CSS, combine rel="preload" asynchronous loading, and use media delayed loading reasonably to avoid excessive splitting and complex script control.

In the following tutorial, I will show you how to create Lottie animations in Figma. We'll use two colorful designs to exmplify how you can animate in Figma, and then I'll show you how to go from Figma to Lottie animations. All you need is a free Fig

ThebestapproachforCSSdependsontheproject'sspecificneeds.Forlargerprojects,externalCSSisbetterduetomaintainabilityandreusability;forsmallerprojectsorsingle-pageapplications,internalCSSmightbemoresuitable.It'scrucialtobalanceprojectsize,performanceneed

No,CSSdoesnothavetobeinlowercase.However,usinglowercaseisrecommendedfor:1)Consistencyandreadability,2)Avoidingerrorsinrelatedtechnologies,3)Potentialperformancebenefits,and4)Improvedcollaborationwithinteams.

CSSismostlycase-insensitive,butURLsandfontfamilynamesarecase-sensitive.1)Propertiesandvalueslikecolor:red;arenotcase-sensitive.2)URLsmustmatchtheserver'scase,e.g.,/images/Logo.png.3)Fontfamilynameslike'OpenSans'mustbeexact.

Autoprefixer is a tool that automatically adds vendor prefixes to CSS attributes based on the target browser scope. 1. It solves the problem of manually maintaining prefixes with errors; 2. Work through the PostCSS plug-in form, parse CSS, analyze attributes that need to be prefixed, and generate code according to configuration; 3. The usage steps include installing plug-ins, setting browserslist, and enabling them in the build process; 4. Notes include not manually adding prefixes, keeping configuration updates, prefixes not all attributes, and it is recommended to use them with the preprocessor.

CSScounterscanautomaticallynumbersectionsandlists.1)Usecounter-resettoinitialize,counter-incrementtoincrease,andcounter()orcounters()todisplayvalues.2)CombinewithJavaScriptfordynamiccontenttoensureaccurateupdates.

In CSS, selector and attribute names are case-sensitive, while values, named colors, URLs, and custom attributes are case-sensitive. 1. The selector and attribute names are case-insensitive, such as background-color and background-Color are the same. 2. The hexadecimal color in the value is case-sensitive, but the named color is case-sensitive, such as red and Red is invalid. 3. URLs are case sensitive and may cause file loading problems. 4. Custom properties (variables) are case sensitive, and you need to pay attention to the consistency of case when using them.
