如何构建自己的技术博客

news2024/10/6 4:14:33

本文相关知识点:

  • markdown
  • Vuepress/vitepress
  • GitHub pages 托管服务

为什么建议搭建个人博客网站

拥有自己的技术博客,不仅可以提升自己的技术能力,还可以提升自己的影响力,未来也可能带来一些“睡后”收益。

对于我们职场新人来说,拥有自己的技术博客一方面可以总结沉淀自己所学内容,同时也是一个不错的加分项 – 助你获得更多的面试机会。

国内目前的一些技术博客网站:CSDN、博客园、掘金、51CTO、腾讯云等等

使用这些第三方的网站是不错的选择,但长期下来,对于个人名牌建立有很大的限制。(挂广告、私域扩展)

  • 阮一峰的个人博客:http://www.ruanyifeng.com/blog/
  • 张鑫旭的个人博客:http://www.zhangxinxu.com/wordpress/
  • 廖雪峰的个人博客:https://www.liaoxuefeng.com/

选型

Vuepress(vue2.0)/ Vitepres(vue3.0)+ GitHub pages

  • Vuepress:vue 驱动的静态网站生成器
    • 优势:以 Markdown 为中心的项目结构,可以专注于写作;加载速度、SEO也比较友好(博客网站SEO无疑是非常重要的);支持md中写vue组件。
  • Github pages:Github 提供的用于搭建个人网站的静态站点托管服务。
    • 优势:无需购买服务器(或云服务),省去了一定费用以及服务配置等;
    • 劣势:响应速度无法跟自由服务器相比,同时搜索引擎收录不友好

在这里插入图片描述

markdown

目前市面上主流的文字编辑型软件,大概率都已经支持了 markdown 输入。(印象笔记、notion、语雀等等)

重视输入效率、易读性,而不是追求复杂美观的排版。

markdown 是美国科技博主 John Gruber 于 2004 年推出,是一种纯文本格式的轻量级标记语言。

*Italic*	
**Bold**	
# Heading 1	
## Heading 2	
[Link](http://a.com)	
![Image](http://url/a.png)	
> Blockquote	
* List
* List
* List
1. One
2. Two
3. Three
`Inline code` with backticks	

markdown教程:https://commonmark.org/help/

vuepress

vuepress 站点本质是一个由 vue 和 vue router 驱动的单页应用。路由会根据你的 markdown 文件的相对目录来自动生成。每个 markdown 文件都通过 markdown-it 编译为 html,然后将其作为 vue 组件的模板。

markdown-it:解析 markdown 内容

browser (CDN):

<script src="https://cdnjs.cloudflare.com/ajax/libs/markdown-it/13.0.1/markdown-it.js"
    integrity="sha512-yucm4wm2T2mZNzxtKGWQLTsMAGI+KNFRLsfFDNO9SqdMn9eauAORCybt1UnXRAAlrxJoFpdLSR9lhfuCKx22kQ=="
    crossorigin="anonymous" referrerpolicy="no-referrer"></script>

浏览器中,直接使用 window 对象访问

let md = window.markdownit({
  breaks: false
})
let content = '# title1\n## title2\n**加粗***斜体*'
let result = md.render(content)
'# title1\n## title2\n**加粗***斜体*'
<h1>title1</h1>
<h2>title2</h2>
<strong>加粗</strong>
<em>斜体</em

在这里插入图片描述

安装步骤

  1. 创建基础工程

    mkdir ligang-blog
    cd ligang-blog
    npm init
    
  2. 依赖安装

    npm install -D vuepress
    
  3. 添加命令(package.json):

    {
     "scripts": {
       "docs:dev": "vuepress dev docs",
       "docs:build": "vuepress build docs"
     }
    }
    
  4. 创建第一篇博文

    mkdir docs
    echo '# Hello World' > docs/HelloWorld.md
    
  5. 启动服务

    npm run docs:dev
    

    如果有报错,需要查看vue相关版本,重新安装

    npm list vue
    npm install vue@x.x.xx
    

目录结构

VuePress 遵循 “约定优于配置” 的原则,推荐的目录结构如下:

.
├── docs
│   ├── .vuepress (可选的)						      # 用于存放全局的配置、组件、静态资源等
│   │   ├── components (可选的)					  # 该目录中的 Vue 组件将会被自动注册为全局组件
│   │   ├── theme (可选的)							   # 用于存放本地主题
│   │   │   └── Layout.vue							  
│   │   ├── public (可选的)								# 静态资源目录
│   │   ├── styles (可选的)								# 用于存放样式相关的文件
│   │   │   ├── index.styl								    # 将会被自动应用的全局样式文件
│   │   │   └── palette.styl							    # 用于重写默认颜色常量,或者设置新的 stylus 颜色常量
│   │   ├── templates (可选的, 谨慎配置)		# 存储 HTML 模板文件
│   │   │   ├── dev.html									# 用于开发环境的 HTML 模板文件
│   │   │   └── ssr.html									# 构建时基于 Vue SSR 的 HTML 模板文件
│   │   ├── config.js (可选的)							# 配置文件的入口文件,也可以是 YML 或 toml
│   │   └── enhanceApp.js (可选的)				  # 客户端应用的增强
│   │ 
│   ├── README.md
│   ├── guide
│   │   └── README.md
│   └── config.md
│ 
└── package.json

基本配置

一个 VuePress 网站必要的配置文件是 .vuepress/config.js,它应该导出一个 JavaScript 对象:

module.exports = {
  title: '李刚的个人技术博客',
  description: '技术沉淀、经验分享'
}

它包含一个页头,里面包含一个标题和一个搜索框。VuePress 内置了基于 headers 的搜索 —— 它会自动为所有页面的标题、h2h3 构建起一个简单的搜索索引。

主题配置

一个 VuePress 主题应该负责整个网站的布局和交互细节。在 VuePress 中,目前自带了一个默认的主题(正是你现在所看到的),它是为技术文档而设计的。同时,默认主题提供了一些选项,让你可以去自定义导航栏(navbar)、 侧边栏(sidebar)和 首页(homepage) 等

默认主题:
在这里插入图片描述

首页

修改首页,修改 docs/README.md,VuePress 提供了对 YAML front matter (opens new window)开箱即用的支持,且内置了一些变量。

YAML:是一种表达数据序列化的格式。

Front matter:直译为“前置内容”,它是基于 YAML 格式的纯文本内容,放置在文档开头,用于标明文档的各种属性(元信息)。

---
home: true
heroText: null
tagline: null
author: {name: '李刚'}
footer: MIT Licensed | Copyright © 2023 [ligang](https://xxxx.xxx.com)
---

**欢迎大家来到{{ $frontmatter.author.name }}的个人技术博客站点**
  • home: true 启用主题
  • 将 heroText、tagline 的内容设置为 null 来禁用标题和副标题
  • 定义变量 author,文档中可以通过 {{ $frontmatter.xx }} 方式获取
  • 设置 footer
导航栏

.vuepress/config.js 配置文件中,通过 themeConfig.nav 增加一些导航栏链接:

// .vuepress/config.js
module.exports = {
  ...
  themeConfig: {
    nav: [
      {text: '关于我', link: '/about'},
      {text: '联系我', link: '/contact'},
      { text: '友情链接', link: 'https://ligang.blog.csdn.net/', target:'_blank', rel:'' },
      {
        text: 'vue专题',
        items: [
          {text: '文章A', link: '/vue/one'},
          {text: '文章B', link: '/vue/two'}
        ]
      }
    ]
  }
}
  • 可以通过 items 数组而不是一个单一的 link 时,它将显示为一个 下拉列表 (支持嵌套)
侧边栏

.vuepress/config.js 配置文件中,通过 themeConfig.sidebar 增加侧边栏配置:

// .vuepress/config.js
module.exports = {
  ...
  themeConfig: {
    ...
    sidebar: [
      '/',
      ['/about', '关于我'],
      ['/contact', '联系我'],
      {
        title: 'vue专题',
        path: '/vue/',
        collapsable: true,
        children: [
          ['/vue/one', '文章A'],
          '/vue/two'
        ]
      }
    ]
  }
}
  • [link, text] 指定链接文字,默认采用页面中的标题
  • 侧边栏同样可以分组,但需要按照指定文件结构
.
├─ README.md
├─ contact.md
├─ about.md
└─ vue/
   ├─ READMEvue
   ├─ one.md
   └─ two.md

可以自动开启侧边栏配置

// .vuepress/config.js
module.exports = {
  themeConfig: {
    sidebar: 'auto'
  }
}
其他一些配置
// .vuepress/config.js
module.exports = {
  nextLinks: true,				 # 上一篇链接
  prevLinks: true,				 # 下一篇链接
  
  lastUpdated: 'Last Updated',    # 最后修改时间
  
  repo: 'https:///xxx',			  # Github URL
  repoLabel: '查看源码',			  # 自定义仓库链接文字
}

博客主题

官方也提供了博客主题,

  1. 搭建 VuePress 博客的脚手架

    yarn create vuepress [blogName]
    # 填写必要信息
    cd [blogName] && yarn
    
  2. 构建

    yarn dev
    

示例:https://billyyyyy3320.com/

GitHub pages 托管服务

直接从 github 托管,只需编辑、推送、就生效。

  1. 创建存储库:[username].github.io username是github上的用户名

  2. 将本地工程与远程仓库关联(docs/.vuepress/dist)

    git remote add origin git@github.com:381510688/381510688.github.io.git
    git branch -M main
    git push -u origin main
    

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

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

相关文章

QTday2(登录界面+跳转——小黄人篇)

1.完成登录框的按钮操作&#xff0c;并在登录成功后进行界面跳转 form.h&#xff1a; #ifndef FORM_H #define FORM_H#include <QWidget> #include <QPushButton> #include <QDebug> #include <QLineEdit> //行编辑器 #include <QLab…

W5500-EVB-PICO主动PING主机IP检测连通性(十)

前言 上一章我们用W5500_EVB_PICO 开发板做UDP组播数据回环测试&#xff0c;那么本章我们进行W5500_EVB_PICO Ping的测试。 什么是PING&#xff1f; Ping &#xff08;Packet Internet Groper&#xff09;是一种因特网包探索器&#xff0c;用于测试网络连接量的程序 。Ping是…

python读取图像小工具

一、和图像交互获得图像的坐标和像素值 import cv2 import numpy as np import signal import threading import timeif __name__ __main__:img cv2.imread(XXX,0)#读取图片font_face,font_scale,thicknesscv2.FONT_HERSHEY_SIMPLEX,0.5,1#鼠标交互def mouseHandler(event,x…

Android基础之Activity生命周期

Activity是Android四大组件之一、称为之首也恰如其分。 Activity直接翻译为中文叫活动。在Android系统中Activity就是我看到的一个完整的界面。 界面中看到的TextView(文字&#xff09;、Button(按钮)、ImageView&#xff08;图片&#xff09;都是需要Activity来承载的。 总…

linux免密登录最简单--图文详解

最简单的免密登录 1.A电脑生成秘钥 ssh-keygen -t rsa 2.A电脑将秘钥传给B电脑 ssh-copy-id root192.168.1.129 #将秘钥直接传给B电脑 需要输入B电脑的密码&#xff0c;可以看到成功。 3.测试 同理&#xff1a;如果B->A也需要免密登录&#xff0c;统一的操作。 大功告…

集成指挥平台定时任务故障流量分析

01故障现象 集成指挥平台中有定时任务定时传输数据到总队&#xff0c;总队定时下发数据到市交警支队。市交警支队发现定时任务一直出现执行失败的错误。市交警支队和总队联系&#xff0c;说需要市交警支队排查一下自身网络&#xff0c;前两天在应用服务器上面抓了定时任务的数…

大数据、AI和云原生:引领未来软件开发的技术演进

文章目录 **1. 数据驱动的创新&#xff1a;****2. 智能化应用的兴起&#xff1a;****3. 云原生的敏捷和可扩展性&#xff1a;****4. 实时性和即时性&#xff1a;****5. 数据隐私和安全&#xff1a;****6. 跨平台和跨设备&#xff1a;****7. 自动化和智能编程&#xff1a;****8.…

Stable Diffusion 多视图实践

此教程是基于秋叶的webui启动器 1.Stable Diffsuion 使用多视图需要准备一个多角度open pose 图 我给大家提供一个可使用的。 2.需要添加图片到到controlnet当中,不要选择预处理器,选择模型为openpose的模型,然后需要点选同步图片尺寸。 3.然后填写关键字可以参照一下这个…

IBM Spectrum LSF Explorer 为要求苛刻的分布式和任务关键型高性能技术计算环境提供强大的工作负载管理

IBM Spectrum LSF Explorer 适用于 IBM Spectrum LSF 集群的强大、轻量级报告解决方案 亮点 ● 允许不同的业务和技术用户使用单一解决方案快速创建和查看报表和仪表板 ● 利用可扩展的库提供预构建的报告 ● 自定义并生成性能、工作负载和资源使用情况的报…

设计模式-适配器

文章目录 一、简介二、适配器模式基础1. 适配器模式定义与分类2. 适配器模式的作用与优势3.UML图 三、适配器模式实现方式1. 类适配器模式2. 对象适配器模式3.类适配器模式和对象适配器模式对比 四、适配器模式应用场景1. 继承与接口的适配2. 跨平台适配 五、适配器模式与其他设…

无涯教程-Python机器学习 - Extra Trees函数

它是袋装决策树集成方法的另一种扩展。在这种方法中,从训练数据集的样本中构建随机树。 在以下Python食谱中,我们将通过在Pima Indians糖尿病数据集上使用sklearn的ExtraTreesClassifier类来构建额外的树集成模型。 首先,导入所需的软件包,如下所示: from pandas import rea…

Nginx详解 三:高级配置

文章目录 1. 网页的状态页2. Nginx第三方模块2.1 echo模块 3. 变量3.1 内置变量3.1.1 示例 3.2 自定义变量3.2.1 自定义访问日志3.2.2 自定义json 格式日志 3.4 Nginx压缩功能 4. HTTPS4.1 Nginx的HTTPS工作原理4.2 启用功能模块的配置过程 5、自定义图标 1. 网页的状态页 基于…

江苏移动基于OceanBase稳步创新推进核心数据库分布式升级

*本文首发自《中国电信业》 数字经济时代&#xff0c;数据库作为企业核心数据存储、处理、挖潜等方面的关键载体&#xff0c;重要性日益凸显。对于运营商而言&#xff0c;数据库具有行业用户数量多、访问数量多、业务复杂度高、数据安全性高、响应要求性高以及需要 7*24 小时服…

【组合计数 or 树DP】2021 icpc 上海 G

Problem - G - Codeforces 题意&#xff1a; Code&#xff1a; #include <bits/stdc.h>#define int long longusing namespace std;const int mxn1e610; const int mxv1e610; const int mod998244353;vector<int> G[mxn];int N,u,v; int ans1; int sz[mxn];void…

手把手教你写出第一个C语言程序

Hello, World! 1. 前言2. 准备知识2.1 环境2.2 文件的分类2.3 注释2.3.1 注释的作用2.3.2 注释的两种风格2.3.2.1 C语言的注释风格2.3.2.2 C的注释风格 2.3.3 VS中注释和取消注释的快捷键 3. 开始演示3.1 创建项目3.2 创建源文件3.3 写代码3.4 编译链接运行 4. 代码解释4.1 写主…

Apipost:API文档、调试、Mock与测试的一体化协作平台

随着数字化转型的加速&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为企业间沟通和数据交换的关键。而在API开发和管理过程中&#xff0c;API文档、调试、Mock和测试的协作显得尤为重要。Apipost正是这样一款一体化协作平台&#xff0c;旨在解决这些问题&#xf…

QT 使用信号与槽实现界面跳转

一、创建一个新的页面 1 > 在原有工程上新建一个页面 2 > 选择Qt - Qt 设计师界面类 - choose 3 > 选择Widget模板 - 下一步 4 > 输入自定义类名 - 下一步 会自动生成其同名的.h .cpp .ui文件 5 > 最终效果 Headers存放.h文件 Soueces存放.cpp文件 Forms存放.u…

unity 之参数类型之引用类型

文章目录 引用类型引用类型与值类型的差异 引用类型 在Unity中&#xff0c;引用类型是指那些在内存中存储对象引用的数据类型。以下是在Unity中常见的引用类型的介绍&#xff1a; 节点&#xff08;GameObject&#xff09;&#xff1a; 在Unity中&#xff0c;游戏对象&#xff…

学习 使用pandas库 DataFrame 使用

1 、 数据排序 sort_values()函数 by:要排序的名称或名称列表&#xff0c; sorted_df df.sort_values(byAge,ascendingFalse) 由大到小排序&#xff1b; sorted_df df.sort_values(byAge) 由小到大排序&#xff1b; # 创建一个示例数据帧 data {Name: [Tom, Nick, John…

9.嵌套路由

1.添加主路由main <template><div><!-- 页面布局 --><el-container><!-- 侧边栏 --><el-aside width"200px">Aside</el-aside><!-- 页面布局 右边 包括header 和main --><el-container><el-header>Head…