不会前端,怎么快速打造属于自己的个人博客?

news2024/9/30 23:25:14

个人博客

    • 简介
      • 提前准备
    • 一、初始化vuepress项目
    • 二、页面配置
      • 首页配置
      • 顶部配置
      • 顶部导航栏路由配置
      • 侧边导航栏配置
    • 三、打包部署
    • 四、数据统计
      • 插槽自定义
      • 插槽配置
      • 整体结构
      • 页面效果
    • 项目地址

简介

主要教大家如何快速搞一个属于自己的博客网站,特别是一些不怎么会前端的后端同学,先看一下效果吧,已经上线的网站: 网站地址

在这里插入图片描述

在这里插入图片描述

提前准备

环境问题和服务器问题这里就不做教学了

开发环境说明(主要对后端说明一下):

idea+node+npm+vue.js+vuepress2.0

需要掌握知识:nginx部署、服务器(域名、解析、备案、线上环境配置)

不上线可以无视

本项目demo地址:https://gitee.com/colins0902/vuepress-study

已上线的个人博客:https://returnac.cn/

官方文档:https://vuepress.vuejs.org/

一、初始化vuepress项目

  1. 新建一个文件夹 vuepress-study
  2. 进入这个文件夹然后执行 npm init(一直enter 确定,最后yes)
  3. 然后用idea打开这个项目,应该是这样的

在这里插入图片描述

  1. 安装vuepress依赖,在idea 控制台直接执行 npm install -D vuepress@next
    在这里插入图片描述

  2. 在项目package.json文件的scripts 下添加如下命令

    "docs:dev": "vuepress dev docs",
    "docs:build": "vuepress build docs",

在这里插入图片描述

  1. 新建一个目录docs 里面新建一个index.md文件

在这里插入图片描述

  1. 配置npm运行项目

    在这里插入图片描述

  2. 启动项目,根据提示打开 http://localhost:8080/ 你就可以看到你的网站了

在这里插入图片描述

二、页面配置

首页配置

默认情况下咱们的页面都需要在docs目录下,该目录下的index.md就是默认的首页,所以我们只需要修改一下该index.md的内容,就可以充当我们的首页了

---
home: true
heroImage: /images/logo.png
heroText: ReturnAC
tagline: 回归实践,才是最好的提升
actions:
  - text: 快速上手 →
    link: /
    type: primary
features:
- title: 回归实践
  details: 本站尽量保证所有文章会带有环境、版本等前置说明,且均会带有实践示例(可直接运行)或者图示说明(为了更好的理解学习)
- title: 学习进步
  details: 主要目的是记录学习过程以及归纳整理,不敢保证涉及面广和深,但主打一个实践出真知!(有兴趣的小伙伴们也可以联系我上传自己的干货,放心所有文章会带有署名、出处)
- title: 场景|设计
  details: 为了不再受常规业务开发的限制,这里会收集优秀的场景、设计文章,旨在开拓视野、提高思维格局、打破原有的瓶颈
---

在这里插入图片描述

此时首页效果如下:

在这里插入图片描述

注意: .vuepress 目录是项目运行后自动产生的,而图片这种静态资源默认是从.vuepress/public下获取的,所以我们需要在.vuepress目录下新建一个public文件夹,这里为了方便管理,我在public下又新建了一个images文件夹专门用来放图片,所以可以看到我的图片路径是/images/*****

顶部配置

需要在.vuepress目录下新增一个config.ts文件,内容如下:

import { defineUserConfig,defaultTheme } from 'vuepress'
// 顶部导航栏的搜索框 需要install这个依赖  npm i -D @vuepress/plugin-search@next
import { searchPlugin } from '@vuepress/plugin-search'


export default defineUserConfig({
    // 插件配置  这里配置了那个搜索框
    plugins:[
        searchPlugin({
            locales: {
                '/': {
                    placeholder: 'Search',
                },
                '/zh/': {
                    placeholder: '搜索',
                },
            },
            // 排除首页
            isSearchable: (page) => page.path !== '/',
        }),
    ],

    // 打包后html内部资源访问路径
    base:'./',
    // 打包后的文件放哪
    dest:"dist/",
    lang: 'zh-CN',
    // 标题
    title: 'ReturnAC',
    description: '回归实践,才是最好的提升',
    // 头部配置
    head: [['link', { rel: 'icon', href: '/images/logo.png' }],
    ],
    //新增导航条的配置
    theme: defaultTheme({
        // tab栏的图标; 图片 / 会自动去public文件夹里找图片
        logo: '/images/logo.png',
        // 顶部导航条
        navbar: [
            {
                text: '首页',
                link: '/',
            },{
                text: '全局导航',
                link: '/'
            },
            {
                text: 'JAVA',
                link: '/'
            },
            {
                text: '算法',
                link: '/',
            },
            {
                text: '框架|中间件',
                link: '/'
            },
        ],
    }),
})


在这里插入图片描述

这时候,你重启一下项目,就可以看到效果如下:

在这里插入图片描述

顶部导航栏路由配置

为了与首页区别,也为了让目录结构更有层次感,我们就在docs下新建一个pages文件夹,用来放其他md文件,如Test1.md、Test2.md、Test3.md

上面的顶部导航需要点击跳转,就需要配置link 路径,也就是md文件的相对路径:

在这里插入图片描述

此时我们在页面上点击"全局导航"就能跳转到Test1页面了:

在这里插入图片描述

如果需要配置下拉,就需要在配置文件中配置children属性:

在这里插入图片描述

就可以看到导航下面出来了子路由了

在这里插入图片描述

注意:这个link 如果配成"/" 就会默认找docs下的index.md,如果配成"/pages/" 就会默认找/docs/pages/下的index.md

侧边导航栏配置

默认情况下,打开一个md文件页面,左边是默认展开的,可以设置成不展开

# config.ts 里面的theme: defaultTheme 下面加上
theme: defaultTheme({
  sidebar: false
})


展开的情况下,左边默认就是md里面的一二级目录

这里情况很多,我这里只列举最常见的一种,就是顶部导航和侧边栏联动,等于说顶部是一个大归类的标题,而侧边栏则是对应的小标题归类,小标题内则是你的文章,这种需要怎么配置呢?如下:

sidebar:{
    '/pages/': [
        {
            text:"小标题1",
            collapsible:true,
            // 当然标题也可以配置链接,看你需要
            // link:'',
            children:[
                '/pages/Test1.md',
                '/pages/Test2.md',
                {
                    text: '小标题1内嵌',
                    children: [
                        '/pages/Test2.md',
                        '/pages/Test3.md',
                    ],
                },
            ]
        },
        {
            text:"小标题2",
            collapsible:true,
            children:[
                '/pages/Test1.md',
                '/pages/Test2.md'
            ]
        },
    ]
}

整体结构(需要注意顶部导航的跳转):

在这里插入图片描述

页面效果如下(点击"全局导航"):

在这里插入图片描述

三、打包部署

照着咱们的配置,运行build后,应该会在项目目录下生成一个dist文件夹,这个就是纯静态页面的文件夹了,我们只需要把这个文件夹丢到nginx的html目录下,然后配置一下nginx的conf文件就可以了

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;


    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html/dist;
            index  index.html index.htm;
        }
    
        location /dist {
            root   html/dist;
            index  index.html index.htm;
        }

    }
}

这时候启动nginx访问就可以看到我们的网站啦

四、数据统计

做一个博客肯定需要统计一下页面访问量啦是不是?网上基本都是需要用第三方如:百度统计、谷歌统计啥的,难道不能自己统计吗?打开页面访问个后端接口有多难?

对于一个不怎么懂前端的来说还真挺麻烦的,而且用的还是vuepress这种高度内聚的生成类框架,想加点自己的逻辑处理真蛋疼,主要用的还是vuepress2.0版本,网上资料也不多;不过这能放弃吗?虽然用百度统计这类的确实简单也香,但我还是有自己的原则,于是又看了一遍文档,发现有个组件插槽替换的拓展点,这时候我就想我没能力改写你默认主题,难道我就不能替换个插槽然后加入自己的逻辑吗?开搞!!

插槽自定义

在.vuepress下新建一个layouts文件夹,新建一个Layout.vue文件,内容如下:

<script setup>
import ParentLayout from '@vuepress/theme-default/layouts/Layout.vue'
</script>


<template>
  <ParentLayout>
    <template #page-content-bottom>
      <div v-if="footerShow" class="my-footer">
        <span style=" font-weight: 500;color: var(--c-text-lighter);">浏览量: </span>
        <span style=" font-weight: 400;color: var(--c-text-quote); margin-left: 20px;">{{num}}</span>
      </div>
    </template>
  </ParentLayout>
</template>

<script>
import axios from 'axios';

export default {
  name: 'Layout',
  data() {
    return {
      num: 1550,
      footerShow: this.num!==0
    }
  },

  mounted() {
    // 都是静态页面 试了很多事件都是只加载一次,所以只能用路由切换事件了
    this.$router.afterEach((to, from) => {
        // 目录的描点也可以触发 所以需要过滤掉描点的点击
        if(window.location.href.indexOf("#") ==-1){
          // 把下面这段注释放开,然后填入自己的请求url就可以了
          
          // const url = '';
          // axios.get(url).then((response) => {
          //   if(response.data.code == 200){
          //     this.num=response.data.data;
          //   }else {
          //     this.num=0;
          //   }
          // });
          this.footerShow=this.num!==0
        }
      this.footerShow=this.num!==0
    })

  },

}
</script>


<style lang="css">
.my-footer {
  text-align: right;
  margin-bottom: -40px;

}

</style>

插槽配置

.vuepress下新建一个client.ts文件,内容如下:

import { defineClientConfig } from '@vuepress/client'
import Layout from './layouts/Layout.vue'

export default defineClientConfig({
    layouts: {
        Layout,
    },

})

整体结构

在这里插入图片描述

页面效果

在这里插入图片描述

url我注释了,自己搞个后端服务,用自己的url就好了

好啦到这就结束啦,以后改动了,自动部署啥的,就不用我教了吧,自己研究一下吧,后续我可能会搞成动静结合的效果,毕竟纯静态页面局限性太大了

项目地址

本项目demo地址:https://gitee.com/colins0902/vuepress-study

已上线的个人博客:https://returnac.cn/

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

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

相关文章

【C++】——类与对象(上)

文章目录 1. 前言2. 面向过程和面向对象3. 类的引入4. 类的定义4.1 类的俩种定义方式 5. 类的访问限定符及封装5.1 类的访问限定符5.2 封装 6. 类的作用域7. 类的实例化8. 类对象的存储方式9. this指针9.1 this指针特性 10. 结尾 1. 前言 今天我们来学习C初期最重要的知识点&a…

用于无线传感器网络路由的改进leach协议(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 当前&#xff0c;无线传感器由于技术的发展得到更加广泛的应用&#xff0c;针对无线传感器网络&#xff08;WSN&#xff09;的…

linux重装mmsegmentation

前言 换了个电脑&#xff0c;就想着把之前的mmsegmentation-V0.26.0代码放到新环境&#xff0c;结果踩了不少坑~ 过程 官方步骤 0 安装miniconda 1 创建conda 环境 最开始用的是python3.10&#xff0c;后来发现版本太高不是一件好事&#xff0c;所以装的python3.8 2 安装…

FineBI 6.0入门基础(二)

在图形中分析 组件还可以进行复制,如下图 复制后,切换为【自定义图表】 1.将【毛利额】调整为折线(在图形属性里面进行调整) 2.由于【毛利额】和【毛利额环比增长率】数值差距较大,可将指标中的【毛利额环比增长率】调整为右值轴 3.将图例调整显示位置(组件样式-图例…

ZooKeeper 避坑指南: ZooKeeper 3.6.4 版本 BUG 导致的数据不一致问题

作者&#xff1a;子葵 背景 ZooKeeper 作为分布式系统的元数据中心&#xff0c;对外服务的数据一致性需要得到很好的保证&#xff0c;但是一些老版本的 ZooKeeper 在一些情况下可能无法保证数据的一致性&#xff0c;导致依赖 ZooKeeper 的系统出现异常。 某用户使用 3.4.6 版…

回归问题(AI笔记)

人工智能 回归问题 1943 年&#xff0c;心理学家沃伦麦卡洛克 (Warren McCulloch)和数理逻辑学家沃尔特皮茨(Walter Pitts)通过对生物神经元的研究&#xff0c; 提出了模拟生物神经元机制的人工神经网络的数学模型 &#xff0c;这一成果被美国神经学家弗 兰克罗森布拉特(Frank …

(别再手动点APP了)UiAutomator2自动化测试框架带你玩转APP操作

目录 前言 一、uiautomator/uiautomator2的前生今世 1.官方文档介绍 2.梳理一下脉络 3.三款框架对比 二、uiautomator2简介 1.项目组成 2.工作原理 三、环境搭建 1.安装uiautomator2 2.初始化设备 3.init时都干了啥&#xff1f; 四、基础操作 1.连接设备 2.命令…

手把手教你搭建 Webpack 5 + React 项目

前言 在平时工作中&#xff0c;为减少开发成本&#xff0c;一般都会使用脚手架来进行开发&#xff0c;比如 create-react-app。脚手架都会帮我们配置好了 webpack&#xff0c;但如果想自己搭建 webpack 项目要怎么做呢&#xff1f;这边文章将介绍如何使用 webpack 5 来搭建 re…

HNU-操作系统OS-实验Lab2

OS_Lab2_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf &#xff08;学号 202108010XXX&#xff09; 前言 实验一过后大家做出来了一个可以启动的系统&#xff0c;实验二主要涉及操作系统的物理内存管理。操作系统为了使用内存&#xff0c;还需高效地管理…

C++全栈知识体系 2.0

C 全栈知识体系 一个记录C知识的学习网站&#xff01; 包含内容: C(基础、函数、知识点、IO框架、新特性), 算法, 数据库(MySQL、ElasticSearch、Redis), 编程四大件, 架构, 微服务, 中间件(ZeroMQ、Dubbo、Consul、Logstash、Kong), 工具, 部署(Docker、k8s、Istio), 项目(开源…

YOLOv7环境配置的一些细节

评论区和私信问我问题的同学们不要急&#xff0c;你们的问题我一直在研究&#xff0c;只是还没成功(>﹏<)&#xff0c;如果完成了我会第一时间发出来并通知你的(≧∇≦)/ 本文将讲解YOLOv7环境配置的一些细节&#xff08;YOLOv5环境配置也适用&#xff0c;之前在配gpu版本…

【移动端网页布局】流式布局案例 ⑦ ( 水平排列的图片链接 2 | 浮动设置 | 盒子模型类型设置 | 结构伪类选择器 )

文章目录 一、水平排列的图片链接样式及核心要点1、实现效果2、HTML 结构3、CSS 样式 二、完整代码示例1、HTML 标签结构2、CSS 样式3、展示效果 一、水平排列的图片链接样式及核心要点 1、实现效果 实现如下样式 , 水平排列的图片链接 , 第一个图片占宽度的 50% , 第二第三个 …

【视频解读】Window上安装和使用autogluon V0.7

1.使用conda安装的python环境 教程使用的是极简版miniconda,由于我们的电脑中安装了anaconda&#xff0c;所以不需要进行进一步安装。python版本为3.9&#xff0c;博客里面有anaconda和python版本的对应关系。注意查看版本autogluon V0.4需要3.8或者3.9和3.10&#xff0c;pip版…

分类预测 | MATLAB实现基于PSO-NN、SVM、KNN、DT的多特征数据分类预测,二分类及多分类

分类预测 | MATLAB实现基于PSO-NN、SVM、KNN、DT的多特征数据分类预测&#xff0c;二分类及多分类 目录 分类预测 | MATLAB实现基于PSO-NN、SVM、KNN、DT的多特征数据分类预测&#xff0c;二分类及多分类分类效果基本描述程序设计参考资料 分类效果 基本描述 Matlab实现基于PSO…

智能家居项目

文章目录 一、功能描述二、整体框架结构及编译2.1、整体框架2.2、编译Makefile 三、工厂模式四、守护进程udev五、监控视频储存六、遇到的问题和未解决的问题七、代码流程图7.1、树莓派&#xff08;8线程 &#xff0c;2进程&#xff09;7.2、手机APP 八、内网穿透&#xff08;实…

机器学习(五):基于KNN模型对高炉发电量进行回归预测分析

文章目录 专栏导读1、KNN简介2、KNN回归模型介绍3、KNN模型应用-高炉发电量预测3.1数据集信息:3.2属性信息3.3数据准备3.4数据标准化和划分数据集3.5寻找最佳K值3.6建立KNN模型预测4、完整代码专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作者,专注于分享python领域知…

二叉树的最近公共祖先

1题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它…

Redis做消息队列实现异步读写看这篇够了!

一、消息队列的简介 在企业的应用中&#xff0c;发送消息方和接收消息方&#xff0c;可以采取同步通信或异步通信。同步通信在实际的应用中效率不高。本文主要介绍异步通信&#xff0c;其中异步通信分为&#xff1a;第一&#xff0c;基于内存的jvm阻塞队列实现异步通信。这种方…

Android Studio Electric Eel 2022.1.1 Patch 2 导入opencv 4.5,并实现图片灰度变换和图片叠加

软件版本&#xff1a; Android Studio Electric Eel 2022.1.1 Patch 2 https://sourceforge.net/projects/opencvlibrary/files/4.5.0/opencv-4.5.0-android-sdk.zip/download 创建工程 with API23: 导入opencv sdk: File->New->Import Module 添加工程依赖&…

MySQL的概念、编译安装

一.数据库的基本概念 1、数据&#xff08;Data&#xff09; • 描述事物的符号记录 • 包括数字&#xff0c;文字&#xff0c;图形&#xff0c;图像&#xff0c;声音&#xff0c;档案记录等 • 以“记录”形式按统一的格式进行存储 2、表 • 将不同的记录组织在一起 • …