首页 > 其他分享 >Next.js博客项目-快速起步

Next.js博客项目-快速起步

时间:2025-01-20 15:58:26浏览次数:3  
标签:data 配置 博客 Next https js com


作者: KTO
原文: Next.js博客项目-快速起步
简介: 从nextjs博客模板开始,快速配置搭建自己的博客项目。部署出来的网站样式可以参考原文的网站。


Next.js 博客项目 - 快速起步


使用的模板

我们使用的模板是:
tailwind-nextjs-starter-blog

该模板有 1.0 版本和 2.0 版本。本文以 1.0 版本为例进行介绍。


1. 环境配置

安装 Node.js

首先,确保你的机器上已安装 Node.js。
你可以从 Node.js 官方网站 下载并安装适合你操作系统的版本。

安装项目依赖

拉取模板项目后,使用以下命令安装项目依赖:

npm install

yarn install

开发工具推荐

推荐使用以下开发工具:

  • VSCode(免费)
  • IDEA 专业版(付费)

我个人使用的是 PyCharm 专业版,它也可以用来启动 Next.js 项目。

参考资源

如果仍有不明白的地方,可以参考以下资源:

你也可以使用 Kimi AI 搜索相关知识。根据我的体验,Kimi 在联网搜索方面表现较为强大和准确,尤其是与国内主流 AI 平台相比。

(虽然我平时主要使用 DeepSeek 或通义。)


2. 项目文件配置

项目配置可以参考官方 README 文档,并按照以下教程逐步进行。

data/siteMetadata.js

  • 包含大部分与网站相关的信息,用户应根据需求进行修改。
  • 文件路径:项目目录/data/siteMetadata.js
  • 代码内容见 附录data/siteMetadata.js,相关选项已翻译,点击可跳转附录内容。
  • 如果某些功能不需要,可以直接注释掉。例如,我的博客关闭了评论系统和订阅系统,也没有开启导航栏置顶。

data/authors/default.md

  • 默认作者信息(必需)。可以通过在 data/authors 中添加文件来添加其他作者信息。
  • 该信息会在“关于”页面或文章页面中显示。
  • 详细内容见 附录data/authors/default.md,点击可跳转附录内容。

其他文件

以下文件不再逐一详细介绍,更多内容将在下一篇进阶教程中展开:

  • data/projectsData.js:用于生成项目页面上样式化卡片的数据。
  • data/headerNavLinks.js:导航链接。
  • data/logo.svg:替换为你自己的 logo。
  • data/blog:替换为你自己的博客文章。
  • public/static:存储图片和 favicon 等资源。
  • tailwind.config.js 和 css/tailwind.css:Tailwind 配置和样式表,可修改以调整网站外观。
  • css/prism.css:控制代码块样式,可自由定制并使用你喜欢的 PrismJS 主题。
  • contentlayer.config.ts:Contentlayer 配置,包括内容源的定义和使用的 MDX 插件。
  • components/MDXComponents.js:在此指定自定义 JSX 代码或 React 组件,可直接在 .mdx.md 文件中使用。
  • layouts:页面中使用的主要模板:
  • 文章布局:PostLayout(默认两栏布局)、PostSimple(简化版)、PostBanner(带横幅图片)。
  • 博客列表布局:ListLayout(带搜索栏)、ListLayoutWithTags(带标签信息侧边栏)。
  • next.config.js:Next.js 相关配置。如果需要从其他域加载脚本、图片等,需调整内容安全策略(Content Security Policy)。

基本上这些大概配置一下博客就能正常运行了

可以启动试一下

next dev

3. 撰写博客

你可以在 /data/blog 目录中新建 .mdx 文件来撰写自己的博客文章,也可以参考官方留下的示例探索 .mdx 文件的撰写方式。

必填配置

这里简单讲一下必填配置,进一步的自定义配置将在进阶教程中展开。

我们可以看到示例文档中的开头配置是这样的:

---
title: 'Markdown Guide'
date: '2019-10-11'
tags: ['github', 'guide']
draft: false
summary: 'Markdown cheatsheet for all your blogging needs - headers, lists, images, tables and more! An illustrated guide based on GitHub Flavored Markdown.'
---

其中:

  • title:配置文章的标题。
  • date:配置文章的发布日期。
  • tags:配置文章的标签。网站中的标签将会根据你写入的标签自动生成。
  • draft:表示这篇文章是否是草稿状态。只有 truefalse 两个选项。草稿状态的文章在正式部署时不会展示出来,不过在开发环境中是可以直接看到的。
  • summary:文章的摘要。它会展示在首页和博客页面的列表中。个人建议不需要太长。

正文撰写

在配置项下方,你可以使用 Markdown 语法撰写正文内容。Markdown 是一种轻量级的标记语言,支持标题、列表、图片、表格等多种格式。

示例

以下是一个简单的示例:

---
title: '我的第一篇博客'
date: '2023-10-01'
tags: ['blog', 'tutorial']
draft: false
summary: '这是我的第一篇博客,介绍了如何使用 Next.js 和 Tailwind CSS 搭建个人博客。'
---

# 欢迎来到我的博客

这是我的第一篇博客,主要介绍了如何使用 Next.js 和 Tailwind CSS 搭建个人博客。

## 1. 安装依赖

首先,我们需要安装项目依赖:

npm install

## 2. 启动项目

安装完成后,使用以下命令启动项目:

next dev

## 3. 撰写博客

在 `/data/blog` 目录中新建 `.mdx` 文件,开始撰写你的博客吧!

提交与部署

完成博客撰写后,你可以将其提交到 GitHub 上,并部署你的网站。具体的部署步骤将在后续教程中详细介绍。


至此,我们已经完成了基本的配置和博客文章的撰写。接下来,你可以继续探索更多高级功能,或直接部署你的博客网站。


附录

配置文件

siteMetadata.js-code
/** @type {import("pliny/config").PlinyConfig} */
const siteMetadata = {
  // 博客标题
  title: 'Next.js Starter Blog',
  // 作者
  author: 'Tails Azimuth',
  // 页面头部标题
  headerTitle: 'TailwindBlog',
  // 描述
  description: '使用Next.js和Tailwind.css创建的博客',
  // 语言
  language: 'zh-CN',
  // 主题
  theme: 'system', // system, dark 或 light
  // 博客网址
  siteUrl: 'https://tailwind-nextjs-starter-blog.vercel.app',
  // GitHub仓库地址
  siteRepo: 'https://github.com/timlrx/tailwind-nextjs-starter-blog',
  // 博客logo
  siteLogo: `${process.env.BASE_PATH || ''}/static/images/logo.png`,
  // Twitter卡片图片
  socialBanner: `${process.env.BASE_PATH || ''}/static/images/twitter-card.png`,
  // Mastodon地址
  mastodon: 'https://mastodon.social/@mastodonuser',
  // 邮箱地址
  email: 'address@yoursite.com',
  // GitHub地址
  github: 'https://github.com',
  // Twitter地址
  x: 'https://twitter.com/x',
  // Facebook地址
  facebook: 'https://facebook.com',
  // YouTube地址
  youtube: 'https://youtube.com',
  // LinkedIn地址
  linkedin: 'https://www.linkedin.com',
  // Threads地址
  threads: 'https://www.threads.net',
  // Instagram地址
  instagram: 'https://www.instagram.com',
  // Medium地址
  medium: 'https://medium.com',
  // Bluesky地址
  bluesky: 'https://bsky.app/',
  // 地区
  locale: 'zh-CN',
  // 是否固定导航栏到顶部
  stickyNav: false,
  // 分析工具配置
  analytics: {
    // 如果想使用分析工具,需要将其添加到`next.config.js`文件的内容安全策略中
    umamiAnalytics: {
      umamiWebsiteId: process.env.NEXT_UMAMI_ID, // 例如:123e4567-e89b-12d3-a456-426614174000
      // src: 'https://us.umami.is/script.js' // 如果在美国存储数据,可能需要覆盖脚本
    },
    // plausibleAnalytics: {
    //   plausibleDataDomain: '', // 例如:tailwind-nextjs-starter-blog.vercel.app
    // },
    // simpleAnalytics: {},
    // posthogAnalytics: {
    //   posthogProjectApiKey: '', // 例如:123e4567-e89b-12d3-a456-426614174000
    // },
    // googleAnalytics: {
    //   googleAnalyticsId: '', // 例如:G-XXXXXXX
    // },
  },
  // 新闻通讯订阅
  newsletter: {
    provider: 'buttondown', // mailchimp, buttondown, convertkit, klaviyo, revue, emailoctopus, beehive
  },
  // 评论系统配置
  comments: {
    provider: 'giscus', // giscus, utterances, disqus
    giscusConfig: {
      repo: process.env.NEXT_PUBLIC_GISCUS_REPO,
      repositoryId: process.env.NEXT_PUBLIC_GISCUS_REPOSITORY_ID,
      category: process.env.NEXT_PUBLIC_GISCUS_CATEGORY,
      categoryId: process.env.NEXT_PUBLIC_GISCUS_CATEGORY_ID,
      mapping: 'pathname',
      reactions: '1',
      metadata: '0',
      theme: 'light',
      darkTheme: 'transparent_dark',
      themeURL: '',
      lang: 'en',
    },
  },
  // 搜索功能配置
  search: {
    provider: 'kbar', // kbar 或 algolia
    kbarConfig: {
      searchDocumentsPath: `${process.env.BASE_PATH || ''}/search.json`,
    },
    // provider: 'algolia',
    // algoliaConfig: {
    //   appId: 'R2IYF7ETH7',
    //   apiKey: '599cec31baffa4868cae4e79f180729b',
    //   indexName: 'docsearch',
    // },
  },
}

module.exports = siteMetadata

data/authors/default.md-code
--- name: Tails Azimuth avatar: /static/images/avatar.png
occupation: Professor of Atmospheric Science company: Stanford University email:
address@yoursite.com twitter: https://twitter.com/Twitter linkedin: https://www.linkedin.com github:
https://github.com ---

Tails Azimuth is a professor of atmospheric sciences at the Stanford AI Lab. His research interests includes complexity modelling of tailwinds, headwinds and crosswinds.

He leads the clean energy group which develops 3D air pollution-climate models, writes differential equation solvers, and manufactures titanium plated air ballons. In his free time he bakes raspberry pi.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed neque elit, tristique placerat feugiat ac, facilisis vitae arcu. Proin eget egestas augue. Praesent ut sem nec arcu pellentesque aliquet. Duis dapibus diam vel metus tempus vulputate.

### 配置选项解释:

- **name**: 姓名或昵称,这里是 Tails Azimuth。
- **avatar**: 头像图片的路径,这里是 `/static/images/avatar.png`。
- **occupation**: 职业或职位,这里是“大气科学教授”。
- **company**: 公司或机构名称,这里是“斯坦福大学”。
- **email**: 电子邮件地址,用于联系。
- **twitter**: Twitter 个人主页的链接。
- **linkedin**: LinkedIn 个人主页的链接。
- **github**: GitHub 个人主页的链接。
  下面就是个人简介了

标签:data,配置,博客,Next,https,js,com
From: https://blog.csdn.net/Ktovoz/article/details/145263845

相关文章

  • Go语言【Gin框架】:JSON、AsciiJSON、PureJSON和SecureJSON的区别
    在Go语言中,JSON、AsciiJSON、PureJSON和SecureJSON是Gin框架用于发送JSON响应的方法。1.c.JSON功能:将提供的数据序列化为标准的JSON格式,并将其作为HTTP响应发送给客户端。特点:支持Unicode字符,无需将非ASCII字符转义。某些字符(如<、>和&)会被自动转义为相应的Unicode......
  • 用原生js获取DOM元素的方法有哪些?
    在原生JavaScript中,有多种方法可以获取DOM元素。以下是一些常见的方法:getElementById(id):通过元素的id属性获取元素。这是最快的方式,因为id在HTML文档中是唯一的。varelement=document.getElementById("myElementId");getElementsByClassName(className):通过元素的c......
  • 【JSQLParser库】SQL解析神器
    环境搭建:SpringBoot3.2.51.简介JSQLParser是一个开源的Java库,它专注于SQL语句的解析与操作。该库能够将SQL语句转换为抽象语法树(AST),使开发者能够轻松地分析、修改和重新生成SQL查询。它是基于JavaCC构建的SQL语句解析器。它将SQL语句转换为可遍历的Java类层次结构。......
  • 如何使用js获取当前的url和来源的url?
    在JavaScript中,你可以使用window.location对象来获取当前页面的URL和来源页面的URL。获取当前页面的URL你可以使用window.location.href来获取当前页面的完整URL。例如:varcurrentUrl=window.location.href;console.log(currentUrl);获取来源页面的URL来源页面的URL......
  • 请用js实现一个简单的小区楼的电梯运行程序
    在前端开发中,实现一个简单的小区楼电梯运行程序可以通过模拟电梯的基本行为来完成。以下是一个使用JavaScript实现的简单电梯模拟程序,它允许用户选择楼层并模拟电梯的上下行。HTML部分(用于创建用户界面):<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • 当用户刷新网页时,js的请求有哪些地方会有缓存处理呢?
    当用户刷新网页时,JavaScript(JS)的请求在多个环节都可能涉及到缓存处理。以下是一些主要的缓存处理点和相关机制:浏览器缓存:浏览器会尝试缓存已下载的JS文件,以便在将来的页面加载中重新使用它们,减少对服务器的请求次数和页面加载时间。当用户刷新网页时,浏览器首先会检查本地缓......
  • cpp struct json相互转换
    C++结构体与JSON的相互转换在现代软件开发中,数据的序列化和反序列化是一个常见的需求。尤其在客户端和服务器之间的数据交换中,JSON因其简单、易读和良好的兼容性而被广泛使用。本文将介绍如何在C++中实现结构体和JSON之间的相互转换,重点介绍使用 nlohmann/json库。nlohmann/jso......
  • 前端人必知必会:Node.js进程深度剖析
    文章目录一、Node.js进程初相识二、Node.js进程核心概念2.1进程的基本定义2.2与线程的爱恨情仇2.3进程在Node.js架构中的角色三、Node.js进程相关模块3.1process模块:进程掌控者3.2child_process模块:子进程创建利器3.3cluster模块:多核CPU的完美搭档四、......
  • 深入Node.js工具函数:前端开发的得力助手
    文章目录引言1.Node.js工具函数基础1.1常用工具函数概述1.2工具函数与前端开发的关联2.核心工具函数解析2.1path模块2.1.1resolve函数2.1.2join函数2.2fs模块2.2.1readFile与writeFile2.2.2mkdir与rmdir2.3util模块2.3.1inherits函数2.3.2inspe......
  • 【转】[JavaScript] JS 对象和 JSON 的区别与转换
    转自:kimi.ai在JavaScript中,JS对象和JSON是两个密切相关但又有所区别的概念。以下是它们的主要区别:1. 定义和用途JS对象JS对象是JavaScript中的一种数据结构,用于存储键值对(key-valuepairs)。它是JavaScript中的基本数据类型之一,可以用来表示复杂的数据结构,例如用......