无需花钱购买域名服务器!使用 VuePress + Github 30分钟搭建属于自己的博客网站(保姆级教程)

前言

GitHub Pages 提供免费全球加速的服务器资源,VuePress 将 Markdown 变成艺术品级的网页,仅需 30 分钟,你便可以像提交代码一样发布文章,过程完全免费。

博客搭建好的效果如下:https://honorsong.github.io/example-blog/
在这里插入图片描述
GitHub 官网
VuePress 官方文档

一、本地搭建

准备工具:电脑上需要提前装好 Node.js


第一步:新建一个文件夹

# 打开电脑的「终端」
# 输入命令:
mkdir vuepress-starter && cd vuepress-starter

翻译:创建一个叫 vuepress-starter 的文件夹,并进入它


第二步:初始化项目

# 输入命令:
yarn init   # 或者用 npm init

操作提示:直接按回车键确认所有选项


第三步:安装 VuePress

# 输入命令:
yarn add -D vuepress   # 或者用 npm install -D vuepress

翻译:把 VuePress 这个建站工具安装到你的文件夹里


第四步:创建文档

# 输入命令:
mkdir docs && echo '# Hello VuePress' > docs/README.md

*翻译:在文件夹里新建一个 docs 子文件夹,并创建主页文件 README.md *


第五步:修改配置文件

打开 package.json 文件,在 scripts 里添加:

{"scripts": {"docs:dev": "vuepress dev docs",    // 启动开发模式"docs:build": "vuepress build docs" // 生成最终网站}
}

第六步:启动网站

# 输入命令:
yarn docs:dev   # 或者用 npm run docs:dev

效果:浏览器会自动打开 http://localhost:8080,你会看到一个写着 “Hello VuePress” 的网站!


Hello VuePress

🔥 实时更新

现在你可以:

  1. 用 IDE 或记事本打开 docs/README.md
  2. # Hello VuePress 改成 # 我的第一个网站
  3. 保存文件 → 网站会自动刷新!

我的第一个网站

跟着做下来,你的第一个文档网站就煮好啦! 🎉

二、基础配置

docs 文件夹里新建 .vuepress 文件夹并添加 config.js ,所有 VuePress 相关的文件都会被放在这里。

此时你的项目结构可能是这样:

.
├─ docs
│  ├─ README.md
│  └─ .vuepress
│     └─ config.js
└─ package.json

config.js 里写:

module.exports = {title: 'VuePress 文档',description: 'VuePress + Github 30分钟搭建属于自己的博客网站'
}

👉 效果:搜索引擎更容易找到你的网站(SEO)

SEO


三、添加导航菜单

修改 config.js 如下:

module.exports = {title: 'VuePress 文档',description: 'VuePress + Github 30分钟搭建属于自己的博客网站',themeConfig: {nav: [{text: '首页', link: '/'},{text: 'CodeFish的博客',items: [{text: 'GitHub', link: 'https://github.sheincorp.cn/'},{text: 'CSDN', link: 'https://blog.csdn.net/weixin_41105242'},{text: '掘金', link: 'https://juejin.cn/'}]}]}
}

👉 效果:网站右上角出现导航菜单

添加导航菜单


四、添加侧边栏

docs 文件夹里新建 blog 文件夹并添加一些 .md 文档,添加后的目录如下:

.
├─ docs
│  ├─ README.md
│  └─ .vuepress
│     └─ config.js
|  └─ blog
|  	  └─ FirstMenu.md
|  	  └─ SecondMenu.md
|  	  └─ ThirdMenu.md
└─ package.json

修改 config.js 如下:

module.exports = {title: 'VuePress 文档',description: 'VuePress + Github 30分钟搭建属于自己的博客网站',themeConfig: {nav: [...],sidebar: [{title: '首页',path: '/'},{title: "菜单一",path: '/blog/FirstMenu',collapsable: false, // 不折叠children: [{ title: "菜单二", path: "/blog/SecondMenu" },{ title: "菜单三", path: "/blog/ThirdMenu" }],}]}
}

👉 效果:左侧出现清晰的菜单目录
菜单目录


五、部署到 Github Pages

我们的博客就算是正式做好了,接下来我们部署到免费的 Github Pages 上。

首先在 Github 上新建一个仓库,这里我取的仓库名为 example-blog

example-blog

下一步,我们需要在 config.js 对应添加一个 base 路径配置:

module.exports = {// 路径名为 "/<REPO>/"base: '/example-blog/',//...
}

最终的 config.js 文件内容为:

module.exports = {title: 'VuePress 文档',description: 'VuePress + Github 30分钟搭建属于自己的博客网站',base: '/example-blog/',themeConfig: {nav: [{text: '首页', link: '/'},{text: '我的博客',items: [{text: 'GitHub', link: 'https://github.sheincorp.cn/'},{text: 'CSDN', link: 'https://blog.csdn.net/weixin_41105242'},{text: '掘金', link: 'https://juejin.cn/'}]}],sidebar: [{title: '首页',path: '/'},{title: "菜单一",path: '/blog/FirstMenu',collapsable: false, // 不折叠children: [{ title: "菜单二", path: "/blog/SecondMenu" },{ title: "菜单三", path: "/blog/ThirdMenu" }],}]}
}

然后我们在项目 vuepress-starter 目录下建立一个脚本文件 deploy.sh

注意修改一下对应的用户名和仓库名:

#!/usr/bin/env sh# 确保脚本抛出遇到的错误
set -e# 生成静态文件
yarn run docs:build# 进入生成的文件夹
cd docs/.vuepress/distgit init
git add -A
git commit -m 'deploy'
git branch -M main
git push -f git@github.com:HonorSong/example-blog.git main:pagescd -

然后命令行切换到 vuepress-starter 目录下,执行:

# 输入命令:
sh deploy.sh

项目就会开始构建,然后提交到远程仓库,注意这里提交到了 pages 分支,我们查看下对应仓库分支的代码:

Github Pages
我们可以在仓库的 Settings -> Pages 中看到最后的地址:

Github Pages
像我最后生成的地址就是 https://honorsong.github.io/example-blog/

至此,我们完成了 VuePress 和 Github Pages 的部署。

此后每一次文章内容的更新,配置的更新,仅需要重新执行 sh deploy.sh 命令重新部署,即可对线上页面进行更新。

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

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

相关文章

提交到Gitee仓库

文章目录 注册配置公钥创建空白的码云仓库把本地项目上传到码云对应的空白仓库中 注册 注册并激活码云账号&#xff08; 注册页面地址&#xff1a;https://gitee.com/signup &#xff09; 可以在自己C盘/用户/用户名/.ssh 可以看到 有id_rsa.pub 以前在GitHub注册时搞过&…

如何在 Java 中从 PDF 文件中删除页面(教程)

由于 PDF 文件格式不是 Java 原生支持的&#xff0c;因此要从 PDF 中删除页面&#xff0c;你需要使用外部库。 本教程介绍如何使用 JPedal 来实现这一功能。 开始使用 • 将 JPedal 添加到你的类路径或模块路径中&#xff08;可从官网下载安装试用版 JAR 文件&#xff09; •…

机器学习第二篇 多变量线性回归

数据集&#xff1a;世界幸福指数数据集中的变量有幸福指数排名、国家/地区、幸福指数得分、人均国内生产总值、健康预期寿命、自由权、社会支持、慷慨程度、清廉指数。我们选择GDP per Capita和Freedom&#xff0c;来预测幸福指数得分。 文件一&#xff1a;linear&#xff0c;…

位运算,状态压缩dp(算法竞赛进阶指南学习笔记)

目录 移位运算一些位运算的操作最短 Hamilton 路径&#xff08;状态压缩dp模板&#xff0c;位运算&#xff09; 0x是十六进制常数的开头&#xff1b;本身是声明进制&#xff0c;后面是对应具体的数&#xff1b; 数组初始化最大值时用0x3f赋值&#xff1b; 移位运算 左移 把二…

Java高频面试之并发编程-05

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;线程有哪些调度方法&#xff1f; 在Java中&#xff0c;线程的调用方法主要包括以下几种方式&#xff0c;每种方式适用于…

进程的同步和互斥

进程同步&#xff08;synchronous&#xff09; ✅通俗理解&#xff1a; 就像在排队买饭&#xff0c;一个一个来&#xff0c;前面的人不走&#xff0c;后面的人就不能干事。 进程同步就是&#xff1a;多个进程之间需要协调&#xff0c;有先后顺序&#xff0c;一个进程要等另一…

PDF处理控件Aspose.PDF指南:使用 Python 将 EPUB 转换为 PDF

EPUB是一种流行的电子书格式&#xff0c;用于可重排内容&#xff0c;而PDF则广泛用于固定版式文档&#xff0c;非常适合共享和打印。如果您想使用 Python 将 EPUB 转换为 PDF&#xff0c;Aspose.PDF for Python 提供了一个简单可靠的解决方案。在本教程中&#xff0c;我们将向您…

day4-小白学习JAVA---开发软件_Scanner键盘录入_Random随机数_流程控制语句

开发软件_Scanner键盘录入_Random随机数_流程控制语句 一、开发软件idea&#xff08;MAC版&#xff09;1、软件安装-安装社区版2、中英文设置3、保存时格式化配置4、注释和代码对不齐5、idea快捷键 二、键盘录入--Scanner1、next和nextInt2、next和nextLine区别 三、Random随机…

MySQL基本查询与数据操作全面解析

目录 1. CRUD操作概述 2. Create操作详解 2.1 表的创建 2.2 单行数据插入 2.3 多行数据插入 2.4 插入冲突处理 3. Retrieve操作详解 3.1 基础查询 全列查询&#xff08;慎用&#xff09; 指定列查询 表达式查询 结果去重 3.2 条件查询&#xff08;WHERE子句&#…

01.Python代码Pandas是什么?pandas的简介

01.Python代码Pandas是什么&#xff1f;pandas的简介 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是pandas的使用语法。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性&#xff0c;希望对您有用~ pyth…

(8)ECMAScript语法详解

本系列教程目录&#xff1a;Vue3Element Plus全套学习笔记-目录大纲 文章目录 第2章 ECMAScript2.1 ECMAScript 的发展历史2.2 什么是ES62.3 ES6语法新特性2.3.1 变量声明let2.3.2 常量声明2.3.3 模板字符串2.3.4 函数默认参数2.3.5 箭头函数2.3.6 对象初始化简写2.3.7 解构2.3…

Android JNI开发中头文件引入的常见问题与解决方案​,提示:file not found

Android JNI开发中头文件引入的常见问题与解决方案 问题场景&#xff08;新手易犯错误&#xff09; 假设你在开发一个JNI项目&#xff0c;想要实现一个线程安全的队列&#xff08;SafeQueue&#xff09;&#xff0c;于是直接在cpp目录下创建了safe_queue.h文件&#xff0c;并开…

C++静态与动态联编区别解析

在 C++ 中,静态联编(Static Binding)和动态联编(Dynamic Binding)是两种不同的函数调用绑定机制,核心区别在于确定函数调用的时机和多态性的支持。以下是详细解释: 1. 静态联编(Static Binding) 定义:在编译阶段确定函数调用与具体实现的关系。特点: 由编译器直接确…

如何批量为多个 Word 文档添加水印保护

在日常办公中&#xff0c;Word文档添加水印是一项重要的操作&#xff0c;特别是在需要保护文件内容的安全性和版权时。虽然Office自带了添加水印的功能&#xff0c;但当需要一次性给多个Word文档添加水印时&#xff0c;手动操作显得非常繁琐且低效。为了提高效率&#xff0c;可…

【愚公系列】《Python网络爬虫从入门到精通》057-分布式爬取中文日报新闻数据

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…

Linux系统编程 day9 SIGCHLD and 线程

SIGCHLD信号 只要子进程信号发生改变&#xff0c;就会产生SIGCHLD信号。 借助SIGCHLD信号回收子进程 回收子进程只跟父进程有关。如果不使用循环回收多个子进程&#xff0c;会产生多个僵尸进程&#xff0c;原因是因为这个信号不会循环等待。 #include<stdio.h> #incl…

微信小程序拖拽排序有效果图

效果图 .wxml <view class"container" style"--w:{{w}}px;" wx:if"{{location.length}}"><view class"container-item" wx:for"{{list}}" wx:key"index" data-index"{{index}}"style"--…

hadoop三大组件的结构及各自的作用

1 HDFS 1.1功能 HDFS 是 Hadoop 的分布式文件系统&#xff0c;用于存储和管理海量数据。它具有高容错性、高吞吐量和可扩展性&#xff0c;能够在多个节点上存储和管理大规模数据 1.2架构&#xff1a;采用主从架构&#xff0c;由一个 NameNode 和多个 DataNode 组成。NameNode…

解决jupyter notebook修改路径下没有c.NotebookApp.notebook_dir【建议收藏】

文章目录 一、检查并解决问题二、重新设置默认路径创作不易&#xff0c;感谢未来首富们的支持与关注&#xff01; 最近在用jupyter notebook编写代码时&#xff0c;更新了一下Scikit-learn的版本&#xff0c;然后重新打开jupyter notebook的时候&#xff0c;我傻眼了&#xff0…

MCP Host、MCP Client、MCP Server全流程实战

目录 准备工作 MCP Server 实现 调试工作 MCP Client 实现 MCP Host 配置 第一步:配置支持 function calling的 LLM 第二步:添加MCP Server 一般有两种方式,第一种json配置,第二种直接是Command形式,我这里采用Command形式 第三步:使用MCP Server 准备工作 安装…