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

个人博客

    • 简介
      • 提前准备
    • 一、初始化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.mfbz.cn/a/17474.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信息安全保障

文章目录 信息安全保障基础基本概念信息安全定义广义和狭义的信息安全问题信息安全问题的根源和特征情报威胁和态势感知信息安全保障基础信息安全属性信息安全视角 信息安全发展阶段通信安全计算机安全信息系统安全信息安全保障网络安全空间 信息安全保障新领域工业控制系统(IS…

【虹科案例】使用 TCP 分析测量握手时间

如何使用 Allegro Network 万用表的 TCP 分析确定握手时间 握手需要多少时间&#xff1f; 在图 1 中&#xff0c;您可以在虹科Allegro 网络万用表的 TCP 统计数据中看到过去 10 分钟的客户端握手次数。在这里&#xff0c;您可以清楚地看到在指定时间段内有延长的响应时间。但…

ChatGPT探索系列之五:讨论人工智能伦理问题及ChatGPT的责任

文章目录 前言一、安全二、隐私和道德三、我们应该做什么总结 前言 ChatGPT发展到目前&#xff0c;其实网上已经有大量资料了&#xff0c;博主做个收口&#xff0c;会出一个ChatGPT探索系列的文章&#xff0c;帮助大家深入了解ChatGPT的。整个系列文章会按照一下目标来完成&am…

给定一个文本文件,每行是一条股票信息,写程序提取出所有的股票代码

问题&#xff1a;给定一个文本文件&#xff0c;每行是一条股票信息&#xff0c;写程序提取出所有的股票代码。其中&#xff0c;股票代码规则是&#xff1a;6 位数字&#xff0c; 而且以.SH 或者.SZ 结尾。 文件内容示例&#xff1a; 2020-08-08;平安银行(000001.SZ);15.55;2940…

如何用ChatGPT做品牌联名方案策划?

该场景对应的关键词库&#xff08;15个&#xff09;&#xff1a; 品牌、个人IP、社交话题、联名策划方案、调研分析、市场影响力、资源互补性、产品体验、传播话题、视觉形象设计、合作职权分配、销售转化、曝光目标、宣发渠道、品牌形象 提问模板&#xff08;1个&#xff09;…

kubernetes项目部署

目录 ​一、容器交付流程 二、k8s平台部署项目流程 三、在K8s平台部署项目 一、容器交付流程 容器交付流程通常分为四个阶&#xff1a;开发阶段、持续集成阶段、应用部署阶段和运维阶段。 开发阶段&#xff1a;开发应用程序&#xff0c;编写Dockerfile; 持续集成阶段&#…

很佩服的一个Google大佬,离职了。。

这两天&#xff0c;科技圈又有一个突发的爆款新闻相信不少同学都已经看到了。 那就是75岁的计算机科学家Geoffrey Hinton从谷歌离职了&#xff0c;从而引起了科技界的广泛关注和讨论。 而Hinton自己也证实了这一消息。 提到Geoffrey Hinton这个名字&#xff0c;对于一些了解过…

Spring Cloud学习笔记【分布式配置中心-Config】

文章目录 SpringCloud Config概述概述传统方式弊端主要功能与GitHub整合配置 Config服务端配置与测试服务端配置(即Gitee上的配置文件)Config Demo配置Spring Cloud Config访问规则 Config客户端配置与测试bootstrap.yml说明Config客户端 Demo配置 SpringCloud Config概述 概述…

无需公网IP 使用SSH远程连接Linux CentOS服务器【内网穿透】

文章目录 视频教程1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下&#xff0c;SSH远程连接家里/公司的Linux CentOS服务器&#xff0c;无需公网IP&#xff0c;也不需要设置…

深入理解Java虚拟机——垃圾收集器

1.前言 在前面我们已经说过了垃圾收集算法&#xff0c;那么现在我们要讲的垃圾收集器&#xff0c;实际上就是对垃圾收集算法的实践。 首先我们先看一张图&#xff0c;这张图可以帮助我们了解各款经典垃圾收集器之间的关系&#xff1a; 图中的垃圾收集器所在的区域代表了它是属…

【三十天精通Vue 3】第二十六天 Vue3 与 TypeScript 最佳实践

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、为什么使用TypeScript?二、Vue 3和TypeScript的基础2.1 安装TypeScript2.2 配置TypeScript2.3 Vue 3中使用TypeScript

Java多线程基础概述

简述多线程&#xff1a; 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程&#xff0c;提升性能。 正式着手代码前&#xff0c;需要先理清4个概念&#xff1a;并发&#xff0c;并行&#xff0c;进程&#…

TinyJAMBU的制动原理——一种轻量化的认证密码

关于TinyJAMBU的定义和介绍在另一篇博文已经介绍过了&#xff0c;这里只对其动作原理进行描述和说明。 对应的博文链接如下&#xff1a;TinyJAMBU&#xff1a;一种轻量化密码介绍 首先&#xff0c;该密码是一个流密码体系的块密码框架。其加密模式整体上来看是块密码&#xff0…

让语言学习更简单的 WordFlow

作为一个英语并不是那么特别好的计算机专业学生&#xff0c;长期积累英语的学习对个人发展还是有意义的。简单来说&#xff0c;我在语言上最大的两个问题&#xff0c;一个自己「不理解」&#xff0c;另一个是自己「不会表达」。 上述两个问题主要体现在口语层面&#xff0c;而…

实验二 存储器管理

实验二 存储器管理 实验目的&#xff1a; 理解各类置换算法的原理和虚拟存储器管理的方法。 实验内容&#xff1a; 编程实现LRU算法或CLOCK/改进算法等置换算法&#xff08;二选一&#xff09;&#xff0c;模拟实现虚拟存储器的地址变换过程。 实验步骤&#xff1a; 1…

【Golang项目实战】用Go写一个学生信息管理系统,真的太酷啦| 保姆级详解,附源码——建议收藏

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;数据结构、Go&#xff0c;Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: Go语言核心编程近期目标&#xff1a;写好专栏的每一篇文章 学习了Go的基…

图神经网络:在自定义数据集上动手实现图神经网络

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 文章目录 自定义数据集动手实现图神经网络自定义数据集训验测集拆分&#xff0c;创建Data的数据结构&#xff0c;观察Data的基本信息&#xff0c;可视化图网…

震惊,为了学会泛型类竟做这种事?!

上一节&#xff0c;我们基本学会了Java泛型类的用法。 传送门&#xff1a;彻底弄懂Java的泛型 - 泛型类 这一节&#xff0c;我们转变一下风格&#xff0c;具体是什么风格呢&#xff0c;你马上就懂了。 宝子们&#xff0c;欢迎大家来到我们的泛型直播间&#xff0c;这一讲呢&a…

Ansible的脚本-playbook 剧本

目录 1.剧本&#xff08;playbook&#xff09; 1.playbook介绍 2. playbooks 的组成 3.案例&#xff1a;编写httpd的playbook 4.定义、引用变量 5.指定远程主机sudo切换用户 6.when条件判断 7.迭代 2.playbook的模块 1.Templates 模块 2.tags 模块 3.Roles 模块 1.…

【Linux从入门到精通】vim的基本使用各种操作详解

文章目录 一、vim编辑器简单介绍 二、vim编辑器的四种模式 2、1 正常/普通/命令模式(Normal mode) 2、2 插入模式(Insert mode) 2、3 末行模式(last line mode) 三、命令模式的相关操作实例 3、1 光标的相关操作 3、2 文本操作 四、插入模式下的相关操作 五、末行模式下的相关操…
最新文章