Blog 3.0
老博客地图:https://lz38.github.io/
上手了一些前端(与 NodeJs)项目,越发的觉得第二版博客费拉不堪,改用 pnpm 都做不到(npm 和 yarn 简直就是无底洞),于是决定重构博客。
本篇文章不详细介绍重构的内容,只是简单的介绍一下博客的使用方法。
hexo 博客的搭建
hexo 官网链接
安装 nodejs、git,不细说,建议用 linux 或者 wsl(这里建议 archwsl),内存不够上不了 wsl 就推荐 scoop 包管理器吧,非常不建议 msys2 等 mingw 方案,天天报 bug。搞不了 wsl 也不想用 powershell 建议双系统。
老博客记录的搭建过程,看看就好,这个没有难度
1 2 3 4 5
| npm install hexo-cli -g hexo init blog cd blog npm install hexo server
|
一些 hexo 命令:
1 2 3 4
| hexo clean hexo generate hexo deploy hexo server
|
以上命令可以简化成
1 2 3 4
| hexo cl hexo g hexo d hexo s
|
一般不用,直接在 package.json 里写脚本更符合我的习惯,也就添加新功能调试的时候用用。
脚本他不香吗:
1 2 3 4 5 6 7 8 9 10 11 12
| { "scripts": { "prepare": "husky install", "build": "hexo generate", "clean": "hexo clean", "deploy": "hexo deploy", "server": "hexo server", "lint-staged": "lint-staged" } }
|
husky 配合 github action 配合自己写写的 hexo 小扩展不要太舒服,比 2.0 搞的一键 python 脚本香多了。
之前写的一键脚本,不嫌弃的话就用用吧。
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
| import time import os import re from git import Repo
def time_stamp_to_time(timestamp): time_struct = time.localtime(timestamp) return time.strftime('%Y-%m-%d %H:%M:%S', time_struct)
def time_to_time_stamp(_time): time_struct = time.strptime(_time, '%Y-%m-%d %H:%M:%S') return int(time.mktime(time_struct))
def get_file_modify_time(file_path): t = os.path.getmtime(file_path) return time_stamp_to_time(t)
def get_file_head_time(file_path): f = open(file_path, 'r', encoding='utf-8') lines = f.readlines() for line in lines: if 'updated' in line: updated_time = line.replace('updated: ', '') updated_time = updated_time.replace('\n', '') if not re.match(r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$', updated_time): updated_time = '1970-01-01 00:00:00' break f.close() return updated_time
def update_head_time(file_path, time): f = open(file_path, 'r', encoding='utf-8') lines = f.readlines() for line in lines: if 'updated' in line: lines[lines.index(line)] = 'updated: ' + time + '\n' f = open(file_path, 'w', encoding='utf-8') f.writelines(lines) f.close() break f.close()
now_time = time_stamp_to_time(time.time()) repo = Repo('.')
status = repo.git.status('--porcelain', '--untracked-files=all') for line in status.split('\n'): file_name = str(line[3:]) if re.search(r'source(/|\\)_posts', line) is not None: update_head_time(file_name, now_time) print('\033[0;31m update head time:\033[0m ' + file_name) repo.git.add('.') repo.git.commit('-m', now_time) repo.git.push() os.system('hexo clean') os.system('hexo generate') os.system('gulp build') os.system('hexo deploy')
|
顺带一提,自动更新创建时间和更新时间只要安装hexo-filter-date-from-git
这个包就可以。
1 2 3 4
| os.system('hexo clean') os.system('hexo generate') os.system('gulp build') os.system('hexo deploy')
|
这一大串也只要写在 github action 里就行了,git push
后自动构建。