VuePress 搭建结合GitHub Pages CI

news2024/11/20 13:19:25

简介

VuePress 是尤雨溪(vue.js 框架作者)4月12日发布的一个全新的基于 vue 的静态网站生成器,实际上就是一个 vue 的 spa 应用,内置 webpack,可以用来写文档。详见 VuePress中文网

其实类似的建站工具有很多,比如 WordPress、Jekyll、Hexo 等,其中 WordPress 需要自己购买虚拟主机,不考虑;Jekyll 是 Github-Page 默认支持的,听说操作比较复杂。

初步使用

如果想快速搭建的话直接clone我的demo项目

git clone https://github.com/zhangyongtian/VuepressBlog.git
git clone git@github.com:zhangyongtian/VuepressBlog.git

1.创建一个文件夹

mkdir vuepressBlogDemo

2.全局安装 VuePress

npm install -g vuepress

如果有下列问题,按提示安装对应的npm版本。 

npm install -g npm@9.3.0

3.进入 vuepressBlogDemo 文件夹,初始化项目(作用就是安装相关的依赖)

cd vuepressBlogDemo
npm init -y

4.创建文件夹和文件

初始化以后的目录结构为

在 vuepressBlogDemo 文件夹中创建 docs 文件夹,在 docs 中创建 .vuepress 文件夹,在.vuepress中创建 public 文件夹和 config.js 文件,最终项目结构如下所示:

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

5.在 config.js 文件中配置网站标题、描述、主题等信息。

module.exports = {
    title: 'Zhang\'s blog',
    description: '我的个人网站',
    head: [ // 注入到当前页面的 HTML <head> 中的标签
      ['link', { rel: 'icon', href: '/logo.jpg' }], // 增加一个自定义的 favicon(网页标签的图标)
    ],
    base: '/', // 这是部署到github相关的配置
    markdown: {
      lineNumbers: false // 代码块显示行号
    },
    themeConfig: {
      nav:[ // 导航栏配置
        {text: '大数据', link: '/accumulate/' },
        {text: '算法', link: '/algorithm/'},
        {text: '微博', link: 'https://baidu.com'}      
      ],
      sidebar: 'auto', // 侧边栏配置
      sidebarDepth: 2, // 侧边栏显示2级
    }
  };

 6.在 package.json 文件里添加两个启动命令

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

7.一切就绪 跑起来看看吧

npm run dev

如果出现下面的问题

安装上面显示的依赖就行,然后继续npm run dev 

npm install vue-template-compiler

可以看到运行成功。 

 

MarkDown基本语法 

完成了基础搭建后,就可以在docs目录下新建 .md 文件写文章了(.md 是 Markdown 语法文件,你需要知道 Markdown 的一些基本写法)

代码块高亮

在 .md 文件中书写代码时,可在 ``` 后增加 js、html、json等格式类型,代码块即可按照指定类型高亮,下面我创建了一个index.md

 ```js
 var a = 1
 ```

自定义容器

::: tip 提示
this is a tip
:::
 
::: warning 注意
this is a tip
:::
 
::: danger 警告
this is a tip
:::

效果

支持Emoji 

:tada: :100: :bamboo: :gift_heart: :fire:

 效果

这里有一份 Emoji 大全https://www.webfx.com/tools/emoji-cheat-sheet/ 

支持 PWA(手机访问生成对应的图标)

VuePress 默认支持 PWA,配置方法如下:

config.js 文件中增加

head: [ // 注入到当前页面的 HTML <head> 中的标签
  ['link', { rel: 'manifest', href: '/photo.jpg' }],
  ['link', { rel: 'apple-touch-icon', href: '/photo.jpg' }],
],
serviceWorker: true // 是否开启 PWA

完整配置

module.exports = {
    title: 'Zhang\'s blog',
    description: '我的个人网站',
    head: [ // 注入到当前页面的 HTML <head> 中的标签
      ['link', { rel: 'icon', href: '/logo.jpg' }], // 增加一个自定义的 favicon(网页标签的图标)
      ['link', { rel: 'manifest', href: '/photo.jpg' }],
      ['link', { rel: 'apple-touch-icon', href: '/photo.jpg' }]
    ],
    serviceWorker: true, // 是否开启 PWA
    base: '/', // 这是部署到github相关的配置
    markdown: {
      lineNumbers: false // 代码块显示行号
    },
    themeConfig: {
      nav:[ // 导航栏配置
        {text: '大数据', link: '/accumulate/' },
        {text: '算法', link: '/algorithm/'},
        {text: '微博', link: 'https://baidu.com'}      
      ],
      sidebar: 'auto', // 侧边栏配置
      sidebarDepth: 2, // 侧边栏显示2级
    }
  };

public 文件夹下新建 manifest.json 文件,添加

{
    "name": "张三",
    "short_name": "张三",
    "start_url": "index.html",
    "display": "standalone",
    "background_color": "#2196f3",
    "description": "张三的个人主页",
    "theme_color": "blue",
    "icons": [
      {
        "src": "./photo.jpg",
        "sizes": "144x144",
        "type": "image/png"
      }
    ],
    "related_applications": [
      {
        "platform": "web"
      },
      {
        "platform": "play",
        "url": "https://play.google.com/store/apps/details?id=cheeaun.hackerweb"
      }
    ]
  }

配置好以后的目录结构

最后访问下启动的服务,下面是无连接wifi以后在和手机同一局域网访问的效果。

http://192.168.193.136:8080

效果图

 

点击下拉

 

 

部署上线(Github Pages)

说了这么多都是在本地进行的,现在我们要把本地的内容推送到某个服务器上,这样只要有网络,就可以随时随地看自己的网站了。

一般来说,有两种方案可供选择:

自己买一个服务器,阿里云、腾讯云等,这种方式的好处是速度有保证、可以被搜索引擎收录,坏处是要花钱啊  土豪同学可以考虑。
使用 Github Pages 。什么是 Github Pages 呢?简单说就是 Github 提供的、用于搭建个人网站的静态站点托管服务。很多人用它搭建个人博客。这种方式的好处是免费、方便,坏处是速度可能会有些慢、不能被国内的搜索引擎收录。
最终我选择了方案2,下面将给大家讲解如何使用 Github Pages 服务。

登陆github

打开 github 网站,登陆自己的 github 账号(没有账号的快去注册并面壁思过作为一个优秀的程序员为啥连一个github账号都没有)

接着我们新建两个仓库,

新建仓库一  USERNAME.github.io (不用克隆到本地)

注意!
USERNAME 必须是你 Github 的账号名称,不是你的名字拼音,也不是你的非主流网名,不要瞎起,要保证和Github账号名一模一样!

例如我的 Github 账号名称是 zhangyongtianZYT

 那么新建仓库,Repository name 就填写为:zhangyongtianZYT.github.io

这个仓库建好后,不用克隆到本地,内容更新修改都在下面的仓库中进行。

新建仓库二:随便起一个名字,比如:vuepressBlog (克隆到本地)

这个项目是用来开发博客的,以后只需要改这个项目就够了。

使用工具包的,将 vuepress-devkit 中的内容拷贝到 vuepressBlog 文件夹中
自己从头搭建的,将 vuepressBlogDemo 文件夹的内容拷贝到仓库二,并在根目录下创建 deploy.sh 文件,内容如下:

 1.删除npm安装好的node_modules

 

 2.先进入之前创建的项目。

 初始化这个仓库然后推送到远程仓库

echo "# zhangyongtian.github.io" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:zhangyongtian/zhangyongtian.github.io.git
git push -u origin main

 

3.在根目录下创建 deploy.sh 文件 。(这个操作要在能够执行shell的环境才行) 

#!/usr/bin/env sh
 
# 确保脚本抛出遇到的错误
set -e
 
# 生成静态文件
npm run build
 
# 进入生成的文件夹
cd docs/.vuepress/dist
 
# 如果是发布到自定义域名
# echo 'www.yourwebsite.com' > CNAME
 
git init
git add -A
git commit -m 'deploy'
 
# 如果你想要部署到 https://USERNAME.github.io
git push -f git@github.com:USERNAME/USERNAME.github.io.git master
 
# 如果发布到 https://USERNAME.github.io/<REPO>  REPO=github上的项目
# git push -f git@github.com:USERNAME/<REPO>.git master:gh-pages
 
cd -

这样仓库二和仓库一就建立了关联。

简单说二者的关系是:仓库一负责显示网站内容,我们不需要改动它;日常开发和新增内容,都在仓库二中,并通过 npm run deploy 命令,将代码发布到仓库一。

在 package.json 文件夹中添加发布命令(使用工具包的请忽略)

"scripts": {
  "deploy": "bash deploy.sh"
}

大功告成,运行发布命令(前提是本地可以运行shell脚本才行)

npm run deploy

上面的一系列操作就是相当于打包上传到创建的github.io第一个仓库,如果脚本没有用,那么手动执行也可以。

npm run build

然后把dist里面的数据推送到第一个仓库,先进入到dist文件夹

echo "# zhangyongtian.github.io" >> README.md
git init
git add -A
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:zhangyongtian/zhangyongtian.github.io.git
git push -u origin main

 

 

进入对应自己的github pages

Zhang's blog

访问上面的地址就能够看到页面了

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

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

相关文章

Java多线程 - 创建线程池的方法 - ThreadPoolExecutor和Executors

文章目录线程池(重点)线程池介绍实现线程池的方式方式一: 实现类ThreadPoolExecutorThreadPoolExecutor构造器的参数线程池处理Runnable任务线程池处理Callable任务方式二: Executors工具类创建线程池线程池(重点) 线程池介绍 什么是线程池? 线程池就是一个可以复用线程的技…

以太网报文详解

以太网数据帧格式 以太网链路传输的数据包称做以太帧&#xff0c;或者以太网数据帧。在以太网中&#xff0c;网络访问层的软件必须把数据转换成能够通过网络适配器硬件进行传输的格式。 以太帧的工作机制 当以太网软件从网络层接收到数据报之后&#xff0c;需要完成如下操作&am…

模拟实现stack queue/dequeue/适配器/优先级队列/仿函数

⭐前言&#xff1a;学习C的STL&#xff0c;我们不仅仅要要求自己能够熟练地使用上层语法&#xff0c;我们还必须要求自己了解其底层原理&#xff0c;不需要了解得太深入&#xff0c;但一定得知道我们写出的各种代码后面&#xff0c;究竟采用了哪种设计思想&#xff0c;为什么要…

口碑巨制《流浪地球2》,再燃中国科幻电影新高度!

2019年&#xff0c;中国本土科幻电影《流浪地球》以炸裂之势吸引一众目光。上映26天&#xff0c;票房突破45亿&#xff0c;强势开启中国科幻电影的元年。如今时隔4年&#xff0c;《流浪地球2》再度登陆春节档&#xff0c;票房口碑双丰收&#xff0c;上映四天票房破13亿、淘票票…

Android渗透测试12:IDA动态调试so

0x00 前言 上一篇分享了使用 Android studio 和 Jeb 对 Apk 文件直接进行动态调试&#xff0c;本文将分享使用 IDA pro 调试 so 。 调试的 apk 文件还是使用 CTF案例4 的文件&#xff0c;已经上传到知识星球&#xff0c;可自行下载 本文涉及技术&#xff1a; IDA pro 工具使…

论文解读 - 城市自动驾驶车辆运动规划与控制技术综述 (第4部分)

文章目录&#x1f697; IV. Mothon Planning&#xff08;运动规划&#xff09;&#x1f7e2; D. Graph Search Methods&#xff08;图搜索算法&#xff09;&#x1f7e5; 1) Lane Graph&#xff08;车道图&#xff09;&#x1f7e7; 2) Geometric Methods&#xff08;几何方法&…

AtCoder Beginner Contest 287 A-G 赛时思路+正解

一把给我加到1219了&#xff0c;青大小蒟蒻表示很开心。 A - Majority 题意 问你"For""For""For"字符串数量是否比"Against""Against""Against"数量多。 思路 mapmapmap暴力即可。 A题代码 B - Postal Card 题意…

电脑技巧:教你关闭Win11内存压缩,解决电脑卡顿的问题

很多朋友都注意到&#xff0c;Win11默认开启了内存压缩功能。内存压缩顾名思义&#xff0c;可以压缩内存中的数据&#xff0c;让内存占用更少&#xff0c;同时减少Swap频次&#xff0c;带来更高的I/O效率。 但与此同时&#xff0c;压缩数据需要耗费CPU资源&#xff0c;一些朋友…

Dr4g0n-b4ll靶机总结

Dr4g0n-b4ll靶机渗透测试总结 靶机下载地址: https://download.vulnhub.com/dr4g0nb4ll/Dr4g0n-b4ll.zip 打开靶机,使用nmap扫描靶机的ip和所有开放的端口 可以看到靶机开放了80端口和22端口 根据80端口打开网站 信息收集,目录爆破 在robots.txt下发现一串base64编码 eW91IG…

编写循环(RH294)

循环这东西你早就懂的不是么就像python里的for一样在ansible中 使用loop关键字来实现迭代简单循环简单循环中一般使用loop关键字来开始循环使用循环变量item来存储每个迭代过程中使用的值举个例子 栗子啊首先让我们拿出两个任务片段- name: Postfix is runningservice:name: po…

索引15连问

前言 大家好&#xff0c;我是田螺。 金三银四很快就要来啦&#xff0c;准备了索引的15连问&#xff0c;相信大家看完肯定会有帮助的。 公众号&#xff1a;捡田螺的小男孩 1. 索引是什么&#xff1f; 索引是一种能提高数据库查询效率的数据结构。它可以比作一本字典的目录&am…

从C语言的使用转换到C++(下篇)——刷题、竞赛篇

目录 一、CSTL的简介 二、STL的使用详解 2、1 STL之动态数组vector的使用 2、2 STL之集合set的使用 2、3 STL之映射map的使用 2、4 STL之栈stack的使用 2、5 STL之队列queue的使用 2、6 STL之unordered_map和unordered_set的使用 三、总结 标题&#xff1a;从C语言的使用转换…

还不会SpringBoot项目模块分层?来这手把手教你

文章目录前言&#x1f34a;缘由⏲️本文阅读时长&#x1f3af;主要目标&#x1f468;‍&#x1f393;试用人群&#x1f381;快速链接&#x1f369;水图正文&#x1f96b;1.IDEA新建项目&#x1f32d;2.创建子模块-dependencies(依赖层)&#x1f3af;重点&#x1f36a;3.创建子模…

【寒假小练】day2

前言 日积跬步&#xff0c;能至千里。 水平有限&#xff0c;不足之处望请斧正。 选择题 1、以下程序运行后的输出结果是( ) #include <stdio.h> void fun(char **p) {int i;for(i 0; i < 4; i) {printf("%s", p[i]); } int main() {char *s[6] {"…

Python 本地django外部网络访问

目录 一、前提 1、确定在本地可以访问 二、 本地django项目外部网络访问 1、在settings中配置允许所有服务器访问&#xff08;局域网访问&#xff09; 2、Host配置 3、使用内网穿透工具&#xff08;ngrok&#xff09;&#xff08;外部网络访问&#xff09; &#xff08;…

Acwing---1224. 交换瓶子

交换瓶子1.题目2.基本思想3.代码实现1.题目 有 N 个瓶子&#xff0c;编号 1∼N&#xff0c;放在架子上。 比如有 5个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起 2 个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这…

【第26天】SQL进阶-查询优化- performance_schema系列实战二:锁问题排查(MDL锁)(SQL 小虚竹)

回城传送–》《32天SQL筑基》 文章目录零、前言一、什么是MDL锁二、什么时候适合加MDL锁三、 实战演练3.1 数据准备&#xff08;如果已有数据可跳过此操作&#xff09;3.2 开启第一个会话&#xff0c;显式开启一个事务&#xff0c;并执行一个update语句不提交3.3 开启第二个会话…

机器自动翻译古文拼音 - 十大宋词 - 水调歌头 明月几时有 苏轼

水调歌头明月几时有 北宋苏轼 明月几时有&#xff0c;把酒问青天。 不知天上宫阙&#xff0c;今夕是何年。 我欲乘风归去&#xff0c;又恐琼楼玉宇&#xff0c;高处不胜寒。 起舞弄清影&#xff0c;何似在人间&#xff1f; 转朱阁&#xff0c;低绮户&#xff0c;照无眠。 不应…

idea 配置tomcat 运行jsp项目

1、复用idea打开jsp项目 2、添加tomcat配置 3、点击后会出现配置框,这里画框的地方都选上&#xff0c;版本选择1.8&#xff0c;其他的信息内容默认后&#xff0c;点击确认 4、点击 File->Project Structure,弹出界面选择Project&#xff0c;这里sdk选择1.8&#xff0c;语言选…

#7反转链表#

反转链表 1题目链接 链接 2思路 思路1(暴力): 定义两个指针或者三个指针 这里选择三个指针 清晰一点 头部 头部的下一个 头部的下一个的下一个 n1 n2 n3 做好n2和n1的连接: n2->nextn1 然后: n2n1 n3n2 n3n3->next 相当于三个指针都往…