子龙 子龙
首页
学习指南
工具
AI副业
开源项目
技术书籍

程序员子龙

Java 开发从业者
首页
学习指南
工具
AI副业
开源项目
技术书籍
  • 工具
  • 开发工具

    • IDEA2023.2.5 2023年最新激活破解教程
    • 2023年 Visual Studio破解教程,无限重置使用,亲测有用!
    • Adobe Photoshop 2021中文破解版安装教程(附安装包+图文教程)
    • AutoCAD 2021简体中文64位破解版(附安装教程)
    • Charles抓包工具(破解版)
    • 谷歌浏览器github加速插件,国内访问及下载速度达到2M/S,杠杠的!!
    • 详解 Charles微信小程序抓包,Charles 破解 Charles 激活
    • IDEA 2023年最新无限破解使用教程
    • MobaXterm详细使用教程
    • PS 打不开webp文件怎么办?
    • VMware虚拟机桥接网络保姆级设置教程
    • xftp上传文件中文文件名乱码解决方案
      • webstorm2023破解激活教程
      • Win10下搭建Git服务器
      • xftp中文文件名乱码
      • Xmind2022免安装激活破解方法教程 Xmind破解
      • 爱不释手的IDEA神仙插件,开发效率翻倍!
      • 还在用Jenkins?快来试试这款比Jenkins简而轻的自动部署软件!
      • 导入 ja-netfilter.jar 后输入激活码提示 Key is invalid 原因汇总
      • Navicat Premium 15 永久破解激活工具及安装教程(亲测可用)
      • 分享几个实用的IDEA插件,提高你的工作效率!
      • Xshell7、Xftp7安装破解版教程(亲测可用)
      • window环境下安装Redis及可视化工具Redis Desktop Manager
      • Xmind 破解激活工具下载
      • Xmind2024最新破解教程,简单永久可用
      • 如何激活使用Typora(2024年最新版)
    • office

    • 实用工具

    • 工具
    • 开发工具
    程序员子龙
    2024-01-29
    目录

    xftp上传文件中文文件名乱码解决方案

    # VuePress

    VuePress 是一个以 Markdown 为中心的静态网站生成器。

    # 快速开始

    1、创建并进入一个新目录

    mkdir vuepress-starter && cd vuepress-starter
    
    1

    2、使用你喜欢的包管理器进行初始化

    yarn init # npm init
    
    1

    3、将 VuePress 安装为本地依赖

    yarn add -D vuepress # npm install -D vuepress
    
    1

    4、创建第一篇文档

    mkdir docs && echo '# Hello VuePress' > docs/README.md
    
    1

    5、在 package.json 中添加一些 scripts(opens new window) (opens new window)

    {
      "scripts": {
        "docs:dev": "vuepress dev docs",
        "docs:build": "vuepress build docs"
      }
    }
    
    1
    2
    3
    4
    5
    6

    最终package.json如下:

    {
        "name": "blog",
        "version": "1.0.0",
        "description": "开发技术,分布式,微服务,高并发,高可用,高可扩展,高可维护,JVM技术,MySQL,分布式数据库,分布式事务,云原生,大数据,云计算,渗透技术,各种面试题,面试技巧",
        "main": "index.js",
        "keywords": [
            "开发技术,分布式,微服务,高并发,高可用,高可扩展,高可维护,JVM技术,MySQL,分布式数据库,分布式事务,云原生,大数据,云计算,渗透技术,各种面试题,面试技巧"
        ],
        "author": "程序员子龙",
        "license": "ISC",
        "scripts": {
            "docs:dev": "vuepress dev docs",
            "docs:build": "vuepress build docs"
        },
        "devDependencies": {
            "vuepress": "^1.9.8"
        }
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    6、在docs目录下新建目录kafka,新建md文件

    注意:一定要包含README.md文件

    7、在本地启动服务器

    yarn docs:dev # npm run docs:dev
    
    1

    VuePress 会在 http://localhost:8080 (opens new window) (opens new window)启动一个热重载的开发服务器。

    # 配置导航栏

    # 顶部导航栏

    通过 themeConfig.nav 增加一些导航栏链接

    // .vuepress/config.js
    module.exports = {
      title: '',
      description: '开发技术,分布式,微服务,高并发,高可用,高可扩展,高可维护,JVM技术,MySQL,分布式数据库,分布式事务,云原生,大数据,云计算,渗透技术,各种面试题,面试技巧',
      markdown:{
    	  pageSuffix: '.md',
      },
      themeConfig: {
    	   displayAllHeaders: true ,
    	   activeHeaderLinks: false,
    	   smoothScroll: true,
    	   sidebarDepth: 2,
           nav: [
                { text: '首页', link: '/' },
                { 
                    text: '消息中间件', 
                    items: [
                        { text: 'kafka', link: '/kafka/' }
                    ]
                }
            ],
    	    sidebar: {
    			 '/kafka/': genSidebar.genDefaultSidebar('kafka', 'kafka', true, 4),
    			 '/': ['']
    	
    		}
      }
    
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29

    # 侧边导航栏

    通过配置 themeConfig.sidebar 侧边导航生效

    通常文档多的时候手动配置侧边栏非常麻烦,因此这里采用了脚本自动生成,其原理如下:

    1、遍历指定路径中的Markdown文档,并过滤掉无关文档; 2、通过符号“.”切割文件名获取序号,根据文档序号进行排序; 3、抽取文档名称作为侧边栏标题(title),并拼接出文档路径(path)

    // docs/.vuepress/utils/genSidebar.js
    // docs/.vuepress/utils/genSidebar.js
    const fs = require('fs');
    const rpath = require('path');
    
    // 获取根目录
    var DOCS_PATH = rpath.resolve(__dirname, '../..');
    
    // 比较文档序列
    function cmpMarkDown(md1, md2) {
        var ls1 = md1.split('.');
        var ls2 = md2.split('.');
        return parseInt(ls1[0]) - parseInt(ls2[0]);
    }
    
    // 获取md文档列表
    function getMarkDownList(path, is_sort) {
        var list = new Array();
        if (typeof path == "string" && typeof is_sort == "boolean") {
            let file_list = fs.readdirSync(path);
            for (let i = 0; i < file_list.length; i++) {
                let file = file_list[i];
                if (file.endsWith('.md') && file.indexOf('README') == -1) {
                    list.push(file);
                }
            }
            if (is_sort) {
                list.sort(cmpMarkDown)
            }
        }
        return list;
    }
    
    // 裁剪到文本左侧的特殊字符
    function trimRight(string) {
        var str = new String();
        if (typeof string == "string") {
            str = string
            var filter = new String(' \t\r\n');
            if (filter.indexOf(str.charAt(str.length - 1) != -1)) {
                var i = str.length - 1;
                while (i >= 0 && filter.indexOf(str.charAt(i)) != -1) {
                    i--;
                }
                str = str.substring(0, i + 1);
            }
            return str;
        }
        return undefined;
    }
    
    var genSidebar = {
        // 生成侧边栏
        genDefaultSidebar: function (path, name, is_sort, depth) {
            var result = new Array();
            var object = new Object();
            if (typeof path == "string" && typeof name == "string") {
                let target_path = rpath.resolve(DOCS_PATH, path);
                if (typeof depth != "number") {
                    depth = 2;
                }
                object.title = name;
                object.collapsable = false;
                object.sidebarDepth = depth;
                object.children = new Array();
    
                let md_list = getMarkDownList(target_path, is_sort);
                for (let i = 0; i < md_list.length; i++) {
                    let md = md_list[i];
                    let ls = md.split('.');
                    let iter = new Object();
                    if (ls.length > 2) {
                        iter.title = ls[1];
                        iter.path = ls[0] + '.' + ls[1];
                    } else {
                        iter.title = ls[0];
                        iter.path = ls[0];
                    }
                    object.children.push(iter);
                }
            }
            result.push(object);
            return result;
        }
    }
    
    module.exports = genSidebar;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87

    预览效果如下:

    # 部署

    部署到 GitHub Pages

    1、在docs/.vuepress/config.js 中设置正确的 base。

    如果打算发布到 https://<USERNAME>.github.io/,则可以省略这一步,因为 base 默认即是 "/"。

    如果打算发布到 https://<USERNAME>.github.io/<REPO>/(也就是说你的仓库在 https://github.com/<USERNAME>/<REPO>),则将 base 设置为 "/<REPO>/"。

    2、在GitHub上建立仓库,并建立分支gh-pages

    3、发布

    # 生成静态文件
    npm run docs:build
    
    # 进入生成的文件夹
    cd docs/.vuepress/dist
    git add .
    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>
    # git push -f git@github.com:<USERNAME>/<REPO>.git master:gh-pages
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    上次更新: 2024/01/30, 15:08:57
    VMware虚拟机桥接网络保姆级设置教程
    webstorm2023破解激活教程

    ← VMware虚拟机桥接网络保姆级设置教程 webstorm2023破解激活教程→

    最近更新
    01
    保姆级教程 用DeepSeek+飞书,批量写文案、写文章,太高效了
    06-06
    02
    还在为整理视频思维导图发愁?2 种超实用技巧,让你 10 分钟搞定,高效又省心!
    06-06
    03
    熬夜做PPT?AI一键生成高逼格幻灯片,效率提升10倍!
    06-06
    更多文章>
    Theme by Vdoing | Copyright © 2024-2025

        辽ICP备2023001503号-2

    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式