从零开始:VuePress2 + GitHub Pages 搭建你的第一个免费博客网站

可能你也想拥有一个属于自己的博客网站,但是自己搭个博客网站不知道从何下手,而且还需要租个云服务器,虽然一个月只需几十块钱,但是我们的博客网站是要长期维护的,日积月累也要不少钱呢。

现在我就教你用 VuePress2 + GitHub Pages 搭建个人博客网站,不用服务器,完全免费哦,亲测有效~

你只要跟着我一步步操作就行了,让我们现在就开始吧。

安装 Node.js

首先去Node.js官方下载安装包安装: https://nodejs.org/en
在这里插入图片描述

安装pnpm

同时按 win+R键,在弹出的运行对话框中输入cmd,打开Windows的命令行:

在这里插入图片描述

执行命令:

npm install pnpm -g

安装 VuePress

步骤 1: 创建并进入一个新目录

在命令行中进入存放项目的目录,新建一个文件夹,然后进入文件夹,文件夹的名字随便取。

mkdir zhanyd-blog
cd zhanyd-blog

这里用命令行来新建文件夹,当然你手动建也行。

步骤 2: 初始化项目

git init # 这一步可以先跳过,放到后面一起执行
pnpm init

步骤 3: 将 VuePress 安装为本地依赖

pnpm add -D vuepress@next @vuepress/client@next vue

如果出现了网络连不上的问题:

在这里插入图片描述
将pnpm的仓库源设置为淘宝镜像,再试一试:

pnpm config set registry https://registry.npm.taobao.org

步骤 4: 在 package.json 中添加一些 scripts

{"scripts": {"docs:dev": "vuepress dev docs","docs:build": "vuepress build docs"}
}

打开package.json文件,修改下scripts的内容:

在这里插入图片描述

步骤 5: 将默认的临时目录和缓存目录添加到 .gitignore 文件中

echo node_modules >> .gitignore
echo .temp >> .gitignore
echo .cache >> .gitignore

以上命令会自动在文件夹下添加.gitignore文件,并往文件中写入以下内容:

node_modules
.temp
.cache

这样,项目上传到github的时候就会忽略文件夹中的node_modules目录和.temp、.cache文件。

步骤 6: 创建你的第一篇文档

mkdir docs
echo '# Hello VuePress' > docs/README.md

以上命令会创建docs文件夹,并自动在文件夹下添加README.md文件,并往文件中写入以下内容:

# Hello VuePress

docs/README.md 文件中的内容就是网站首页的内容。

步骤 7: 在本地启动服务器来开发你的文档网站

pnpm docs:dev

在这里插入图片描述
VuePress 会在 http://localhost:8080 启动一个热重载的开发服务器。当你修改你的 Markdown 文件时,浏览器中的内容也会自动更新。

在这里插入图片描述
到了这里VuePress就安装完成了,下面我们来看下配置。

配置 VuePress

VuePress的配置都是通过config.js来进行的,所以第一步就是要新建config.js文件。

新建config.js

在\docs.vuepress目录下新建config.js文件:

在这里插入图片描述

输入以下内容:

import { defineUserConfig } from 'vuepress'export default defineUserConfig({lang: 'zh-CN',title: '你好, VuePress !',description: '这是我的第一个 VuePress 站点',
})

请注意,首次添加config.js文件需要重启服务才能被刷新。

重启下服务,可以看到多了个标题:

在这里插入图片描述
说明配置生效了。

导航栏配置

下面我们来配置下导航栏。

修改config.js文件,添加navbar元素:

import { defaultTheme } from 'vuepress'export default {lang: 'zh-CN',title: 'zhanyd的博客',description: '欢迎来到zhanyd的博客',theme: defaultTheme({// 在这里进行配置navbar: [// NavbarItem{text: '首页',link: '/',},// NavbarGroup{text: '技术文档',children: ['/group/foo.md', '/group/bar.md'],},],}),
}
  • NavbarItem 对象的 text 字段就是导航栏的名字;link 字段就是页面的路径
  • NavbarGroup 对象的 text 字段就是导航栏的名字; children 字段是二级导航的路径

效果就是这样的:

在这里插入图片描述

侧边栏配置

接下来我们要把网站改造成自己喜欢的样子,我的博客有两个系列:网络和设计模式,接下来我们配置一下侧边栏和导航栏。

我们先来看下配置好的页面,首页是这样的:
在这里插入图片描述

点击右上角的“网络”按钮,出来网络侧边栏:

在这里插入图片描述

点击右上角的“设计模式”按钮,出来设计模式侧边栏:

在这里插入图片描述
我们先来看一下配置文件:

import { defaultTheme } from 'vuepress'export default {lang: 'zh-CN',title: 'zhanyd的博客',description: '欢迎来到zhanyd的博客',theme: defaultTheme({// 在这里进行配置navbar: [// NavbarItem{text: '首页',link: '/',},{text: '网络',link: '/network/',},{text: '设计模式',link: '/designPatterns/',},],// 侧边栏对象// 不同子路径下的页面会使用不同的侧边栏sidebar: {'/network/': [{text: '网络',children: [{text: '一张图帮你看懂,在浏览器输入网址回车后,都发生了什么?',link: '/network/一张图帮你看懂,在浏览器输入网址回车后,都发生了什么?.md',},{text: '在Jekyll中创建一个新的列表页面',link: '/network/在Jekyll中创建一个新的列表页面.md',}],},],'/designPatterns/': [{text: '设计模式',collapsible: true,children: [{text: '单例模式--我的机器人女友',link: '/designPatterns/单例模式--我的机器人女友.md',}],},],},    }),
}

分组侧边栏的原理是以文件夹的名字为 key,value 为侧边栏对象数组,如果侧边栏对象里有 children 字段说明这是个二级侧边栏,children 数组里对应的是具体的文档路径。

  • Key 为路径前缀。
  • Value 为侧边栏对象数组 。

我们先在 docs 目录下新建 designPatterns 和 network 文件夹:
在这里插入图片描述

designPatterns 目录下面放设计模式相关的文章:

在这里插入图片描述

network 目录下面放网络相关的文章:

在这里插入图片描述

注意:每个目录下面要有个 README.md 文件,用来存放子目录的首页:
在这里插入图片描述

我们要新增一篇文档的时候就把对应的文档放到对应的目录,然后在 config.js 中把文档的路径加上就行了。

点击文章标题,文章就出来了,效果还不错,接下去我们就来发布我们的网站。

在这里插入图片描述

发布 VuePress

如果你还没有 Github 的账号,就先去注册一个。

新建 Github 仓库

我们先在 Github 上新建一个仓库,我的仓库就叫:blog。

(注意:如果你的博客地址不想要有二级目录(blog),仓库名就叫 <你的用户名>.github.io,具体请看文章最后一段。 )

在这里插入图片描述
在这里插入图片描述

添加 base 路径配置

然后,我们需要在 config.js 添加 base 路径配置:

// 将 base 设置为 "/<REPO>/"
base: "/blog/",

在这里插入图片描述

创建 GitHub Actions 配置文件

在你的项目根目录下,创建 .github/workflows 文件夹,然后创建 .github/workflows/docs.yml 文件来配置工作流。
在这里插入图片描述

把以下内容复制到 docs.yml 文件中:

name: docson:# 每当 push 到 main 分支时触发部署push:branches: [main]# 手动触发部署workflow_dispatch:jobs:docs:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4with:# “最近更新时间” 等 git 日志相关信息,需要拉取全部提交记录fetch-depth: 0- name: Setup pnpmuses: pnpm/action-setup@v2with:# 选择要使用的 pnpm 版本version: 8# 使用 pnpm 安装依赖run_install: true- name: Setup Node.jsuses: actions/setup-node@v4with:# 选择要使用的 node 版本node-version: 18# 缓存 pnpm 依赖cache: pnpm# 运行构建脚本- name: Build VuePress siterun: pnpm docs:build# 查看 workflow 的文档来获取更多信息# @see https://github.com/crazy-max/ghaction-github-pages- name: Deploy to GitHub Pagesuses: crazy-max/ghaction-github-pages@v4with:# 部署到 gh-pages 分支target_branch: gh-pages# 部署目录为 VuePress 的默认输出目录build_dir: docs/.vuepress/distenv:# @see https://docs.github.com/cn/actions/reference/authentication-in-a-workflow#about-the-github_token-secretGITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

提交项目到 github 仓库

在命令行依次执行以下代码,注意 git remote add origin 后面的地址要改成你自己的仓库地址:

  # git init 如果前面执行过,就不用执行了git init git add .git commit -m "first commit"git branch -M main#把 git@github.com:zhanyd/blog.git 改成你自己的仓库地址git remote add origin git@github.com:zhanyd/blog.gitgit push -u origin main

提交完代码之后,在github的仓库中看下Actions下面的信息,看看是否成功了。

额,出错了:

在这里插入图片描述

看了下错误信息,原来是 docs.yml 文件中的 pnpm 的版本和我本地的 pnpm 版本不一样:

在这里插入图片描述

我把docs.yml 文件中 pnpm 版本改成了 7.28.0,这样就和本地的 pnpm 版本一致了:

在这里插入图片描述

重新提交代码到 github,看了下Actions,还是报错,不过错误不一样了,这次是因为权限的问题。

在这里插入图片描述

打开Settings->Actions->General:

在这里插入图片描述

修改 Workflow permissions 为 Read and write permissions :

在这里插入图片描述

再手动执行一下Actions:

在这里插入图片描述

终于成功了:

在这里插入图片描述

接着在Setting标签页中,选择Pages侧边栏,Source 选择 Deploy from a branch,然后在 Branch 标签下选择 gh-pages 分支和 root 目录,点保存,就可以看到上面的博客地址了:

在这里插入图片描述

如果没有显示博客地址,Source 选择 GitHub Actions 试一下:

在这里插入图片描述

打开地址就可以看到我们的博客了,终于发布成功啦!

在这里插入图片描述

发布到 <你的用户名>.github.io

我的博客的地址是:https://zhanyd.github.io/blog,你可能觉得不要 /blog 二级目录更好,能不能直接发布到地址https://zhanyd.github.io 呢?

答案是肯定的。

首先新建一个仓库,仓库名就是 <你的用户名>.github.io,比如我的Github用户名叫 zhanyd,所以我的仓库名就叫做 zhanyd.github.io :

在这里插入图片描述

记得要删除 config.js 中的 base: “/blog/”:

在这里插入图片描述

然后把博客的文件复制到另一个文件夹(注意不要复制.git文件,因为这个文件已经和原来的仓库绑定了)

在这里插入图片描述

在命令行依次执行以下代码,提交到新的仓库就行了,注意 git remote add origin 后面的地址要改成你自己的仓库地址:

  # git init 如果前面执行过,就不用执行了git init git add .git commit -m "first commit"git branch -M main#把  git@github.com:zhanyd/zhanyd.github.io.git 改成你自己的仓库地址git remote add origin git@github.com:zhanyd/zhanyd.github.io.gitgit push -u origin main

看下效果,成功了:

在这里插入图片描述
以上操作都是我亲测有效的,你也来试试吧。

参考资料:https://v2.vuepress.vuejs.org/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/216668.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux的基本指令和权限的知识

学前的建议&#xff1a;大家不要太关注指令是啥&#xff0c;记不住怎么办&#xff08;没事&#xff0c;想用时去查就好了&#xff09;&#xff0c;这篇文章重点部分是围绕指令的周边知识。毕竟指令是“死肌肉”&#xff0c;而一些关于Linux和操作系统的理论知识才是最重要滴&am…

Android Studio中配置Flutter插件,创建小项目“hello world”

文章目录 一、下载Flutter SDK二、Android studio中安装Flutter插件三、创建Flutter小项目 一、下载Flutter SDK 打开官网https://flutter.io/setup-windows/下载Flutter sdk并解压到一目录 二、Android studio中安装Flutter插件 Android studio中安装Flutter插件&#x…

文件系统理解

先前的博客我写了关于缓冲区的理解&#xff0c;顺便提及了在内存的文件是怎样管理的&#xff0c;本文就来描述在磁盘上的文件是怎么样。但要先了解了解磁盘。 在笔记本上机械磁盘被固态硬盘代替&#xff0c;因为固态硬盘更快&#xff0c;而且方便携带&#xff0c;机械硬盘若是受…

银河麒麟重置密码

桌面版银河麒麟重置密码 1.选择界面按e 出现银河麒麟系统选择的页面&#xff0c;我们点击键盘上的“e”键&#xff0c;进入电脑启动项编辑页 2.编辑启动页 在启动项编辑页面&#xff0c;我们将光标移动到linux这一行的最后&#xff0c;然后输入“init/bin/bash consoletty0”…

数据结构和算法 - 前置扫盲

数据结构和算法 一、前置扫盲 1、数据结构分类 1.1 逻辑结构&#xff1a;线性与非线性 tip&#xff1a;逻辑结构揭示了数据元素之间的逻辑关系。 线性数据结构&#xff1a;元素间存在明确的顺序关系。 数据按照一定顺序排列&#xff0c;其中元素之间存在一个对应关系&#x…

office办公技能|ppt插件使用

PPT插件获取&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1BOmPioUKeY2TdC-1V-o3Vw 提取码&#xff1a;tdji 一、ppt插件介绍 PPT插件是一种可以帮助用户在Microsoft PowerPoint软件中添加各种额外功能和效果的应用程序。使用PPT插件可以让用户更加轻松地制作出专业、…

探索低代码的潜力、挑战与未来展望

低代码开发作为一种新兴的开发方式&#xff0c;正在逐渐改变着传统的编程模式&#xff0c;低代码使得开发者无需编写大量的代码即可快速构建各种应用程序。然而&#xff0c;低代码也引发了一系列争议&#xff0c;有人称赞其为提升效率的利器&#xff0c;也有人担忧其可能带来的…

【C语言:动态内存管理】

文章目录 前言1.malloc2.free3.calloc4.realloc5.动态内存常见错误6.动态内存经典笔试题分析7.柔性数组8.C/C中的内存区域划分 前言 文章的标题是动态内存管理&#xff0c;那什么是动态内存管理&#xff1f;为什么有动态内存管理呢&#xff1f; 回顾一下以前学的知识&#xff…

西班牙语 Alt 代码表

西班牙语 Alt 代码表&#xff0c;请参考下图。 输入方法就是按住 Alt 键不松开&#xff0c;然后在小键盘上输入字符&#xff0c;松开 Alt 键&#xff0c;计算机就能输出上面的字符了。 西班牙语的字符没有法语和德语的多。 西班牙语 Alt 代码表 - 系统容器 - iSharkFly西班牙语…

Visual Studio Code (Vscode)配置LaTeX

Visual Studio Code (Vscode)配置LaTeX 实操记录 第一步高效检索&#xff0c;找到官方的、靠谱的安装教程&#xff0c;最好多找几个&#xff0c;英文、中文教程都需要 LaTeX WorkshopInstallation and basic settingsHow to install LaTeX (with previews & autocomplete…

(开源)2023工训大赛智能垃圾分类项目(可循环播放视频,显示垃圾分类信息,拍照识别,垃圾分类,满载报警,压缩)

省赛:由于这个比赛是两年一届&#xff0c;并未做足充分的准备&#xff0c;但是通过一定的单片机基础&#xff0c;加上速成能力&#xff0c;也就是熬夜学&#xff0c;通过疯狂的网络搜索&#xff0c;在省赛第5 入选国赛 下面来简单介绍一下我们作品&#xff1a; 主控&#xff1…

Mac配置环境变量不生效

Mac配置环境变量不生效 Mac中的环境变量介绍 Mac系统的环境变量&#xff0c;加载顺序为&#xff1a; /etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc 当然/etc/profile和/etc/paths是系统级别的&#xff0c;系统启动就会加载&#xff0c;后面…

C# 从代码入门 Mysql 数据库事务

在业务开发中&#xff0c;使用数据库事务是必不可少的。而开发中往往会使用各种 ORM 执行数据库操作&#xff0c;简化代码复杂度&#xff0c;不过&#xff0c;由于各种 ORM 的封装特性&#xff0c;开发者的使用方式也不一样&#xff0c;开发者想要了解 ORM 对事务做了什么处理是…

Python文件读写

文件读写 文件读写一、普通文件读写1.1 读取1.1.1 读取文件的操作流程1.1.2 打开文件语法1.1.3 正反斜杠1.1.4 代码演示 1.2 写入1.2.1 读取文件的操作流程1.2.3 代码演示 二、with上下文2.1 语法2.2 说明2.3 代码演示 三、二进制文件读写四、CSV文件读写4.1 csv文件4.2 读取4.…

Java常用注解

文章目录 第一章、Java注解与元数据1.1&#xff09;元数据与注解概念介绍1.2&#xff09;Java注解的作用和使用1.3&#xff09;注解的分类 第二章、Mybatis框架常用注解2.1&#xff09;Mybatis注解概览2.2&#xff09;常用注解MapperScanMapperSelectInsertUpdateDeleteParam结…

如何利用视频号爆款数据分析平台,实现播放变现?

利用视频号爆款数据分析平台了解当下视频号热点视频&#xff0c;以及那个分类更有潜力&#xff0c;可以即使进行预判&#xff0c; 变现是近年来非常流行的一种商业模式。视频号爆款数据分析平台是视频下载plus的一个功能&#xff0c;可以让用户通过每天都热点数据以及热门榜单…

input 获取焦点后样式的修改

一、实现目标 1.没有获取焦点时样子 2.获取焦点时 代码&#xff1a; <input class"input"placeholder"请输入关键字" input"loadNode" />css .input {border-radius: 14px;border:1px solid #e4e4e4;margin: 5px;margin-top: 10px;wi…

C# WPF上位机开发(内嵌虚拟机的软件开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 学习过halcon的同学都知道&#xff0c;它不仅有很多的图像算子可以使用&#xff0c;而且调试很方便。每一步骤的调试结果&#xff0c;都可以看到对…

2024上海智慧城市展会(世亚智博会)促进长三角地区智慧城市发展

上海市政府近期印发的《上海市进一步推进新型基础设施建设行动方案(2023-2026年)》标志着新一轮新基建的全面启动。市政府副秘书长、市发展改革委主任顾军指出&#xff0c;这一行动方案紧抓智能算力、大模型、数据要素、区块链、机器人等技术发展趋势和绿色低碳节能要求&#x…

微信小程序map视野发生改变时切换定位点

<!--地图--> <view><map id"myMap" style"width: 100%; height: 300px;" latitude"{{latitude}}" longitude"{{longitude}}"scale"{{scale}}" markers"{{markers}}" controls"{{controls}}&q…