原因
间接原因
hexo
基于nodejs
,部署hexo
的时候需要加载许多包。而hugo
只需要一个二进制文件,相对来说部署更加简便。
hugo
的文件分布更简洁一些,可以通过自己写的部署脚本将博客源md文件也上传至同一仓库下的另一分支(hexo
也可以实现,但我没尝试-_-||
直接原因
前几天在使用scoop
升级了nodejs
之后,hexo d
命令报错TypeError [ERR_INVALID_ARG_TYPE]: The "mode" argument must be integer
,无法将本地修改推到github
,就打算迁移至hugo
试一试。
过程中的踩坑
content文件夹
hugo的博客md文件都是放在根目录的content文件夹下(hexo的是在source/_posts文件夹下),在使用命令hugo new
时应指定所属文件夹,例如
1
|
$ hugo new "posts/新文章.md"
|
如果不指定前面的posts文件夹,则直接创建在content文件夹下。
同时,如果直接在content
文件夹下创建诸如me.md
、friendlinks.md
文件,同时在config.toml
配置文件中指定这些文件对应的url链接,则可实现类似hexo
中类似的about.html
、友链
等页面的效果。
disablePathToLower
hugo
在使用时,url会默认将所有英文字母转为小写,这将导致这样的问题:若md文件的名称中有大写字母时,通过链接访问会自己转为小写,提示找不到页面,因此应该在config.toml
中将下面的选项打开
1
|
disablePathToLower = true
|
FrontMatter
例子
1
2
3
4
|
title: test
date: 2020-01-01T12:13:14+08:00
tags: ["hugo"]
categories: ["技术"]
|
date
格式与hexo
不同
类似于Go
中的切片,应该使用中括号[]
,hexo中使用-
。hugo
中若不写中括号,则在生成静态文件时会产生at <.>: *range* can't iterate over
之类的报错。
categories
同样类似于Go
中的切片,应该使用中括号[]
,hexo中使用-
,且hexo
中为单数:category,与tags的复数形式并不一致。若不写中括号,同样会出现tags的类似问题。
hugo的文件结构
1
2
3
4
5
6
7
8
9
10
11
|
➜ myblog-hugo tree -L 1
.
├── README.md
├── config.toml
├── content
├── deploy_git
├── myDeploy.ps1
├── myDeploy.sh
├── public
├── resources
└── themes
|
README.md
文件
我自己创建的
config.toml
文件
hugo的配置文件,拷贝自所使用主题提供的例子,需要自己根据需要修改
content
文件夹
存放博客源文件
deploy_git
文件夹
我自己创建的,用于向github推送的临时文件夹
myDeploy.ps1
文件
推送至Github
的PowerShell
脚本
myDeploy.sh
文件
推送至Github
的Bash
脚本
public
文件夹
存放hugo
生成的静态文件
resources
文件夹
hugo缓存
themes
文件夹
存放主题
推送至Github
public文件夹里的内容为Github Pages
对外显示的内容,因此推送至master
分支。其他一些需要备份的内容,推送至source
分支。
PowerShell脚本
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
|
hugo
cd deploy_git
# update to master branch
git checkout master
# delete all files except .git
$files = Get-ChildItem -Path .\ -Exclude .git
if ($files.count -gt 0) {
foreach($file in $files)
{
Remove-Item $file.FullName -Recurse -Force
}
}
# copy pages files
Copy-Item -Path ..\public\* -Recurse -Destination .\
# Tuesday 06/25/2019 16:17 -07:00
# "dddd MM/dd/yyyy HH:mm K"
$currentTime = Get-Date -Format "yyyy-MM-ddTHH:mm:ss+08:00"
git add -A
git commit -m $currentTime
git push origin master
# update to source branch
git checkout source
# delete all files except .git
$files = Get-ChildItem -Path .\ -Exclude .git
if ($files.count -gt 0) {
foreach($file in $files)
{
Remove-Item $file.FullName -Recurse -Force
}
}
# copy some files
Copy-Item -Path ..\content -Recurse -Destination .\
Copy-Item -Path ..\README.md -Recurse -Destination .\
Copy-Item -Path ..\.gitmodules -Recurse -Destination .\
Copy-Item -Path ..\config.toml -Recurse -Destination .\
Copy-Item -Path ..\myDeploy.ps1 -Recurse -Destination .\
Copy-Item -Path ..\myDeploy.sh -Recurse -Destination .\
Copy-Item -Path ..\themes -Recurse -Destination .\
git add -A
git commit -m $currentTime
git push origin source
# return to the previous path
cd ..
|
Bash脚本
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
|
cd "deploy_git"
git checkout master
rm -rf `ls | grep -v ".git"`
rm ".gitmodules"
cp -r ../public/* ./
git add -A
git commit -m `date +%Y-%m-%dT%H:%M:%S\+08:00`
git push origin master
git checkout "source"
rm -rf `ls | grep -v ".git"`
cp -r ../content ./
cp ../README.md ./
cp ../.gitmodules ./
cp ../config.toml ./
cp ../myDeploy.ps1 ./
cp ../myDeploy.sh ./
cp -r ../themes ./
git add -A
git commit -m `date +%Y-%m-%dT%H:%M:%S\+08:00`
git push origin "source"
|
写在最后
现在还是刚开始使用hugo
,后续如果有其他问题和发现,也会一并更新到这里。