Hexo
支持大量的主题,但是我看中了 hexo.io
站点使用的 navy
主题哈,直接 git clone
下来魔改即可。
第一次使用这个主题是在 2020年6月1日~ 但由于各种原因已经3年没有更新过自己的博客了,本地环境已经没有了,尝试了恢复,但是失败了。
所以这次直接使用最新版本的hexo
和navy
主题来搭建站点。
help
hexo doc
Hexo 版本 |
最低版本 (Node.js 版本) |
最高版本 (Node.js 版本) |
7.0+ |
14.0.0 |
latest |
定制魔改主题
git clone https://github.com/hexojs/site.git cd site git branch b1 git checkout b1
git branch -D b1
npm install hexo generate hexo server
cp my/readme.md site/readme.md
cp my/source/about/index.md site/source/about/index.md
cp my/themes/navy/layout/partial/comment.njk site/themes/navy/layout/partial/comment.njk
cp site/_config.yml site/_config.yml.back cp my/_config.yml site/_config.yml rm -rf site/_config.yml.back
mv site/source/icon site/source/icon.back cp -rp my/icon site/source/icon rm -rf site/source/icon.back
mv site/source/logo.png site/source/logo.png.back mv site/source/logo.svg site/source/logo.svg.back mv site/source/favicon.ico site/source/favicon.ico.back
cp my/source/logo.* site/source/ cp my/source/favicon.ico site/source
rm -rf site/source/logo.png.back rm -rf site/source/logo.svg.back rm -rf site/source/favicon.ico.back
mv site/themes/navy/layout/index.njk site/themes/navy/layout/index.njk.back cp my/themes/navy/layout/index.njk site/themes/navy/layout/index.njk rm -rf site/themes/navy/layout/index.njk.back
mv site/themes/navy/layout/partial/share.njk site/themes/navy/layout/partial/share.njk.back cp my/themes/navy/layout/partial/share.njk site/themes/navy/layout/partial/share.njk rm -rf site/themes/navy/layout/partial/share.njk.back
mv site/themes/navy/layout/partial/footer.njk site/themes/navy/layout/partial/footer.njk.back cp my/themes/navy/layout/partial/footer.njk site/themes/navy/layout/partial/footer.njk rm -rf site/themes/navy/layout/partial/footer.njk.back
mv site/source/_data/languages.yml site/source/_data/languages.yml.back cp my/source/_data/languages.yml site/source/_data/languages.yml rm -rf site/source/_data/languages.yml.back
rm -rf site/source/es rm -rf site/source/ja rm -rf site/source/ko rm -rf site/source/pt-br rm -rf site/source/ru rm -rf site/source/th rm -rf site/source/zh-cn rm -rf site/source/zh-tw
rm -rf site/themes/navy/languages/de.yml rm -rf site/themes/navy/languages/es.yml rm -rf site/themes/navy/languages/fr.yml rm -rf site/themes/navy/languages/ja.yml rm -rf site/themes/navy/languages/ko.yml rm -rf site/themes/navy/languages/pt-br.yml rm -rf site/themes/navy/languages/ru.yml rm -rf site/themes/navy/languages/th.yml rm -rf site/themes/navy/languages/zh-cn.yml rm -rf site/themes/navy/languages/zh-tw.yml
mv site/themes/navy/layout/partial/header.njk site/themes/navy/layout/partial/header.njk.back cp my/themes/navy/layout/partial/header.njk site/themes/navy/layout/partial/header.njk rm -rf site/themes/navy/layout/partial/header.njk.back
mv site/source/index.md site/source/index.md.back cp my/source/index.md site/source/index.md rm -rf site/source/index.md.back
mv site/themes/navy/source/css/_partial/index.styl site/themes/navy/source/css/_partial/index.styl.back cp my/themes/navy/source/css/_partial/index.styl site/themes/navy/source/css/_partial/index.styl rm -rf site/themes/navy/source/css/_partial/index.styl.back
.intro-feature-wrap padding-top: 20px @media mq-tablet flex: 0 0 30% padding-top: 50px @media mq-normal flex: 0 0 30% padding-top: 50px
npm install hexo-algoliasearch --save
mv site/themes/navy/layout/partial/after_footer.njk site/themes/navy/layout/partial/after_footer.njk.back mv site/themes/navy/layout/partial/header.njk site/themes/navy/layout/partial/header.njk.back mv site/themes/navy/source/css/_partial/header.styl site/themes/navy/source/css/_partial/header.styl.back
cp my/themes/navy/layout/partial/after_footer.njk site/themes/navy/layout/partial/after_footer.njk cp my/themes/navy/layout/partial/header.njk site/themes/navy/layout/partial/header.njk cp my/themes/navy/source/css/_partial/header.styl site/themes/navy/source/css/_partial/header.styl
rm -rf site/themes/navy/layout/partial/after_footer.njk.back rm -rf site/themes/navy/layout/partial/header.njk.back rm -rf site/themes/navy/source/css/_partial/header.styl.back
mv site/themes/navy/layout/archive.njk site/themes/navy/layout/archive.njk.back cp my/themes/navy/layout/archive.njk site/themes/navy/layout/archive.njk rm -rf site/themes/navy/layout/archive.njk.back
mv site/themes/navy/layout/post.njk site/themes/navy/layout/post.njk.back cp my/themes/navy/layout/post.njk site/themes/navy/layout/post.njk rm -rf site/themes/navy/layout/post.njk.back
|
支持hexo + typora 图片插入解决办法 
这一步在网上找了好多方法,信息比较乱。
总结下来就是:
1、 我喜欢用typora写文章,那么文章中有图片咋整? 是不是要搞个目录存放一下呀~
hello/01.jpg
hello.md
那么我们就需要hexo new hello
的时候,自动帮我们生成hello目录,实现方式
2、图片我直接贴在typora文档中,图片的地址怎么设置成相对路径呢?

3、 文章写好了,接下来就要用hexo g;hexo s
发布看看了哇~ 结果发现图片不展示呀,检查发现public中html页面上面的图片地址不对
<img src="/abc/image.png" alt="aaa" />
我们实际需要有方案能够改为下面的路径: <img src="/news/2025/10/20/abc/image.png" alt="aaa" />
|
4、安装插件hexo-asset-img
不用考虑了我已经成功解决了,这个插件就是实现 Typora 等 Markdown 编辑器预览 与 Hexo 发布预览 均能正常显示图片 的。来,跟着走:
marked: prependRoot: true postAsset: true relative_link: false
npm install hexo-asset-img --save
npm list hexo-asset-img
└── hexo-asset-img@1.2.0
|
5、再次发布试试咯! 成功!
但是只有 _posts 下的 Markdown(Post)能自动把图片解析为 post asset 路径,和它同级的 docs 目录下的 Markdown 没有被处理。
https://cloud.tencent.com/developer/article/1970544
https://github.com/yiyungent/hexo-asset-img/blob/main/README_zh.md
post_asset_folder: true marked: prependRoot: true postAsset: true relative_link: false
npm install hexo-asset-img --save npm list hexo-asset-img
└── hexo-asset-img@1.2.0
<img src="/abc/image.png" alt="aaa"> 变为: <img src="/news/2025/10/20/abc/image.png" alt="aaa">
mv site/source/_posts site/source/_posts.back cp my/source/_posts site/source/_posts
|
为news页面的文章展示页面添加固定的目录

site/themes/navy/layout/post.njk
<div id="content-wrap"> <div id="content" class="wrapper"> <div id="content-inner"> <article class="article-container" itemscope itemtype="http://schema.org/Article" > <div class="article-inner"> <div class="article"> <div class="inner"> <div class="article-content" itemprop="articleBody"> {{ partial('partial/post', {post: page}) }} </div> <footer class="article-footer"> <time class="article-footer-updated" datetime="{{ date_xml(page.updated) }}" itemprop="dateModified" >{{ __('page.last_updated', date(page.updated)) }}</time > {{ page_nav() }} </footer> {{ partial('partial/comment') }} </div> </div> <aside id="article-toc" role="navigation"> <div id="article-toc-inner"> {{ partial('partial/carbonads') }} <strong class="sidebar-title">{{ __('page.contents') }}</strong> {{ toc(page.content, {list_number: false}) }} <a href="#" id="article-toc-top">{{ __('page.back_to_top') }}</a> </div> </aside> </div> </article> {{ partial('partial/sidebar') }} </div> </div> </div>
|
site/themes/navy/layout/partial/carbonads.njk
<div id="carbonads" class="carbonads"> <span class="carbon-wrap"> <a href="https://github.com/booboowei" class="carbon-img" target="_blank" rel="noopener sponsored" > <img src="https://avatars2.githubusercontent.com/u/21328020?s=460&u=88cf6127c32932188f936d05636b7b0d36783ee1&v=4" alt="ads via Carbon" border="0" style="width:80px;height:80px;border-radius:50%;max-width:130px;" /> </a> <a href="/about/" class="carbon-text" target="_blank" rel="noopener sponsored" > 除了自己的无知,我什么都不知道 </a> </span> </div>
|
site/themes/navy/source/css/_partial/carbonads.styl
#carbonads display: block overflow: hidden margin-top: 40px max-width: 130px text-align: left font-size: 13px line-height: 1.5 a color: inherit text-decoration: none &:hover color: inherit span display: block overflow: hidden
.carbon-img display: block margin: 0 auto 8px line-height: 1
.carbon-text display: block margin-bottom: 8px
.carbon-poweredby display: block text-transform: uppercase letter-spacing: 1px font-size: 9px line-height: 1
|
site/themes/navy/source/css/navy.styl
@import "nib" @import "_variables"
@import "_partial/base" @import "_partial/header" @import "_partial/index" @import "_partial/sidebar" @import "_partial/page" @import "_partial/post" @import "_partial/plugins" @import "_partial/archive" @import "_partial/mobile_nav" @import "_partial/footer" @import "_partial/highlight" @import "_partial/carbonads"
|
为其他page展示页面添加固定的目录
vim site/themes/navy/layout/page.njk <aside id="article-toc" role="navigation"> <div id="article-toc-inner"> {{ partial('partial/carbonads') }} <strong class="sidebar-title">{{ __('page.contents') }}</strong> {{ toc(page.content, {list_number: false}) }} <a href="#" id="article-toc-top">{{ __('page.back_to_top') }}</a> </div> </aside>
|
修改 menu | 将 DOC 改为 Hexo
vim site/source/_data/menu.yml hexo: /docs/
vim site/themes/navy/languages/en.yml menu: hexo: Hexo
vim site/source/_data/sidebar.yml docs: getting_started: overview: index.html setup_vscodium: /docs/setup-vscodium.html
vim site/themes/navy/languages/en.yml sidebar: docs: getting_started: Getting Started overview: Overview setup_vscodium: Setup VSCodium
|