安装
- Node.js 官网 下载并安装nodejs
- 访问 Hugo 官方下载页面,找到最新版本的
hugo_extended_*.windows-amd64.zip
文件并下载。 - 主题:Themes
主题
个人主题
-
商业主题
基础功能
文档大纲层次顺序,参考:Navigation — Doks,对于目录级别的层次顺序,修改
config\_default\menus\menus.en.toml
,例如:[[sidebar_docs]] name = "标题123" pageRef = "/docs/guides" weight = 1 [[sidebar_docs]] name = "标题345" pageRef = "/docs/reference" weight = 2 [[sidebar_docs]] name = "标题456" pageRef = "/docs/resources" weight = 3
对于目录内部的文章层次顺序,修改内容开头的
weight
字段,数值越大越靠后。文档大纲默认展开:修改文档目录及子目录下的
_index.md
文件:sidebar: collapsed: false
文章内容大纲层次:
toc: true
,并且markdown的内容的大纲标题要从二级标题开始使用才会有大纲效果,一级标题不会显示!
增强功能
模板
模板的内容,可以自行修改 archetypes/default.md
例如:
---
title: ''
date:
draft: false
lastmod:
tags: ["python"]
categories: ["Programming"]
authors:
- "iswbm"
---
首页导航菜单
How to get the drop down navigation button? · thuliteio/doks · Discussion #1113,参考老文档:https://v0-4-2--getdoks.netlify.app/docs/recipes/menus/#add-to-main-menu
高亮块
简单的:
内容。。。
复杂的:
内容。。。
context的值可以是:
tip
caution
danger
站内搜索
SEO
多语言
参考:Internationalization (i18n) — Doks
日常更新
可以使用SVN进行管理,在gitee上创建一个仓库,例如web-xxxqqq
,更新到本地文件夹,例如:F:\osopen\web-xxxqqq
。然后把hugo的创建的博客文件组织在这个文件夹里面,文件结构大致如下:
README.md
.codesandbox
.devcontainer
.svn
.vscode
assets
config
content
layouts
node_modules
public
resources
static
.gitpod.yml
.hugo_build.lock
.npmignore
.npmrc
.prettierignore
.prettierrc.yaml
hugo_stats.json
LICENSE
netlify.toml
package.json
package-lock.json
然后把如下的文件或文件夹添加到SVN上:
README.md
assets
config
content
layouts
resources
static
.gitpod.yml
.hugo_build.lock
.npmignore
.npmrc
.prettierignore
.prettierrc.yaml
LICENSE
package.json
package-lock.json
平时更新文章就到content
目录下,有三种形式的文章:
- 产品。
content
根目录下创建的md文件(例如test.md
)最终渲染的网页路径是这样的:https://xxxqqq.com/test
- 文档。子文件夹
docs
下面创建的md文件。 - 博客。子文件夹
blog
下面创建的md文件。
发布:
- 启动
hugo server -D
看效果;技巧:如果有文章一直没有生效的情况,多半是因为标头有误,可以用其他文章的先替换掉逐步修改。一般来说,在该模式下,即时保存就能立即渲染出文章结果了。 - 使用
hugo -D
生成部署文件; - 将上一步生成的部署文件上传到
ftp server
。
自动发布
每次写完新的blog发布变成了一件很麻烦的事,需要这么几步:
- 通过markdown格式很写blog
- 启动
hugo server -D
看效果 - 使用
hugo -D
生成部署文件 - 将上一步生成的部署文件上传到ftp server:由于资源的上传不知道哪些资源有变更,还需要先把已经存在的资源先删除,再重启全部上传一遍。
最后一步最烦,所花的时间也最久。
在网上查了一下hugo自动部署到ftp,还是有办法的。
使用 Hugo 编写博客文章后,配合 SVN 和 FTP 只上传变更文件到 FTP服务器。
配置 SVN
- 首先将 Hugo 项目目录纳入 SVN 版本控制,在项目根目录下执行
svn init
初始化 SVN 仓库,然后使用svn add
命令将项目文件添加到版本库,最后通过svn commit
提交初始版本。
编写博客文章
- 使用 Hugo 的命令
hugo new post/your - post - name.md
来创建新的博客文章,在生成的 Markdown 文件中编写内容。完成后使用hugo
命令编译项目,生成静态网站文件。
利用 SVN 检查变更
- 在项目根目录下执行
svn status
命令,该命令会显示自上次提交以来发生变更的文件列表。新增的文件会显示为?
,修改过的文件会显示为M
。
编写脚本上传变更文件
- 可以编写一个脚本(如 Python 脚本)来处理上传过程。脚本中使用
subprocess
模块调用svn status
命令获取变更文件列表,然后使用 FTP 相关的库(如ftplib
)连接到 FTP 服务器,将变更的文件逐个上传。示例代码如下:
import subprocess
from ftplib import FTP
# 获取SVN变更文件列表
def get_changed_files():
result = subprocess.run(['svn', 'status'], capture_output=True, text=True)
lines = result.stdout.splitlines()
changed_files = [line[8:] for line in lines if line.startswith('M ') or line.startswith('? ')]
return changed_files
# 上传文件到FTP
def upload_files_to_ftp(files, ftp_server, ftp_user, ftp_password):
with FTP(ftp_server) as ftp:
ftp.login(ftp_user, ftp_password)
for file in files:
with open(file, 'rb') as f:
ftp.storbinary(f'STOR {file}', f)
if __name__ == '__main__':
changed_files = get_changed_files()
if changed_files:
ftp_server = 'your_ftp_server'
ftp_user = 'your_user'
ftp_password = 'your_password'
upload_files_to_ftp(changed_files, ftp_server, ftp_user, ftp_password)
print('上传成功')
else:
print('没有变更文件需要上传')
将脚本中的 your_ftp_server
、your_user
、your_password
替换为实际的 FTP 服务器地址、用户名和密码。
这样,每次编译后运行脚本,就只会将有变更的文件上传到 FTP 服务器上。
参考
文档信息
- 本文作者:zhupite
- 本文链接:https://zhupite.com/web/hugo.html
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)