更加通用的Hexo多端部署原理及實現,適用于各種系統之間

本文推薦在作者的個人博客網站閱讀:shenying.online

一、故事背景

故事發生在大學上學期間(而不是寒假)。上學期間,宿舍條件極其惡劣,半夜斷電、空間狹小。我們大學垃圾條件使用游戲本的種種弊端被無限放大:游戲本電源適配器極其臃腫,不插電的情況續航堪憂(難以超過兩個小時),并且由于其結構上的臃腫,在狹小的宿舍空間每次移動、打開猶如小平房開拖拉機。

將游戲本帶去圖書館學習就更是天方夜譚,在此之前我也買了一個MatePad的平板,但是平板的使用場景對一個計科學生來說也實在有限。

于是,我用在學校做臨時監考工作掙的錢入了一臺MacBookAir(二手只要3k左右)。與此同時,我也預知了我即將支付不起博客網站巨額服務器費用的未來,未雨綢繆將博客遷移到了Hexo框架上,從此再無數據擔憂。

我在我的MacBook上第一次部署了Hexo框架,并且由于在學校的主力機是Mac,從來沒有想過在我的游戲本(也就是Windows系統)上部署Hexo框架會怎樣。或者說,我從來沒有考慮過移植的問題。

事情的轉機從我的寒假生活開始。寒假回到家中,我的ROG魔霸新銳2023游戲本再次啟動(沒錯我就是故意寫全了得瑟的😁)。之前的缺點(笨重、移動續航堪憂)瞬間不再是缺點!在家里我的游戲本也是直接化身游戲主機站樁輸出,不再需要頻繁移動使用。于是我將可憐的MacBook拋到一邊,低刷低配的低能MacOS一邊去,Windows萬歲。

直到一段時間后我又開始寫Hexo博客,習慣了Wordpress網頁端后臺直接書寫博客的我一時間竟不知道如何在我的Windows上寫博客。我看了幾篇博客:Hexo從Mac到Windows。我本來以為這樣就能解決了,抄作業嘛多簡單~

結果就是,我看了好幾篇類似的Mac遷移Hexo到Windows的博客,在我的電腦上按照相同的步驟最終都會在同一個步驟報錯。報錯!報錯!還是報錯。

嘗試過和人機ChatGPT老師交流,無果ed。

誰知這事兒就這樣撂下了,我也懶得研究了,幾乎有半個寒假,我每次想在我的shenying.online上發布博客都是將陣地轉移到Mac上操作。就這么麻煩的事兒我干了一個寒假,就因為跟著上面說的博客做爆了錯沒有成功移植(要知道我寒假主力機一直是Windows的ROG,你可以想象我正在用windows寫Markdown格式的博客,但是到了發布到Gitpage的時候卻不得不打開Mac再復制過去發布一遍)。

直到2月12日事情才迎來了轉機,我實在無法忍受這種寫博客的割裂感了!我要像Hexo(駭客)一樣寫博客!我不能忘記老祖宗傳下來的編程教養:優雅。這么粗魯的事情不能再干下去了,一點兒也不Hexo。

接下來就是我自己弄懂的Heox博客部署原理以及多端部署的核心思路。

二、Hexo 文件結構解讀

想知道Hexo如何多端部署,先要知道Hexo是怎么工作的。首先我們來看看Hexo框架的文件結構:

image-20250212124219664

看好了,別眨眼。這里的node_modules是node的用到的庫,系統會根據你安裝的主題啊之類的自定義自動生成,不用太關注他(意思是弄丟了也沒事兒,畢竟不是核心數據)。

public是你用hexo g后生成的靜態文件。相應的hexo clean會刪除他。

scaffolds也是Hexo初始化會自動生成的默認文件,你寫文章不會影響里面的文件所以不用管他。

source就非常重要了,我們重點來看一下。可以看到,里面存放的是最核心的文件,也就是博客網站的生命,博客文章的.md格式文件,草稿,還有一些主題生成的文件,這里以我常用的主題redefine為例,個別文件可能不一樣。

themes文件夾里沒什么重要的文件,不用管。

image-20250212124812396

這里就要談一下Hexo的工作機制了,Hexo本質上還是類似Vue腳手架那一套的前端框架。你可以理解為你在本地編寫了source中的文件,這時候你想要發布到網頁上去,Hexo就會幫你項目打包到public文件夾中并成為一個靜態的前端項目,然后將public文件夾中的文件部署到Gitpage。

發現沒有,這里的public的功能很像你寫一個程序,編譯成了exe。你把exe發送給別人讓別人直接執行。

并且這里的source相當于是你的元數據,類似于數據庫一樣至關重要的存在。

接著說說這里的_config.yml,這是你的網站的一些配置,也就是個性化的自定義文件。如果你使用的主題,就會有主題對應的_config.yml來配置你的主題的一些個性化設置,例如這里有兩個主題:config.landscape.ymlconfig.redefine.ym

package.json中存放著你用npm下載的包的信息,你可以理解為npm是一個應用商店,這就是應用商店的應用列表。我看的教程中就是告訴我把原來電腦的package.json拷貝過來然后在根目錄npm install。結果我按著操作,每次安裝都會抱一堆警告和錯誤。

所以,這個文件我們也不需要。

2.1 需要的文件

綜上所述,我們其實只需要關注我們博客網站的核心文件即可,我建議將他們專門備份到一個代碼倉庫:

核心文件

沒錯,就是他們。你看我多謹慎。想想如果我還在使用Wordpress博客來備份還需要備份什么數據庫,如果用Hexo靜態博客框架就只需要把你的文章的.md文件和站點配置文件_config.yml全塞進一個倉庫就行了,多方便。

當然還有一種更加優雅的方案:創建一個名為Hexo的分支,存放你的Heox本地配置文件。網上都能找到教程,點我跳轉到其中一篇。

由于Hexo會將source經過框架內部的處理和美化最終生成一個public部署到Gitpage,而public又是有別于source的。比如,你好世界.md這篇文章在public中找到后已經變成了你好世界.html了。所以Github的博客托管倉庫中是沒有我們的source的,也找不到那些文章的.md的markdown文件。它都變成html格式了,你還怎么玩?

這些重要文件只會在你的本地計算機上,所以一定要自己及時備份起來以防后患(說不定哪天你的電腦就自己偷偷喝咖啡了呢~🔪)。

完成這些文件的備份,工作就很機械了。我的終極完美適配的思路是:按照原來你部署的方式,老老實實地從零開始部署。冷靜地打開你的主題的官方文檔,老老實實地把主題包括每一個插件自己安裝上。

沒錯,你沒有聽錯,終極的方案就是這么樸實無華。

然后的然后,把sourceconfig相關的文件一五一十的替換。在Gitpage或者說Github的博客托管倉庫中創建一個新的Branch,BranchName(分支名)就見仁見智了,比如我在Windows寫博客的時候,用windows這個branch。

然后就是很是很重要的一點(我已經不知道說了多少個然后了,果然連接詞還是得多學啊,Then,After that什么的,哈哈)。你最后總要hexo d然后把你的靜態文件托管上去的吧,所以別傻傻的把_config.yml完全替換過去。你總得把里面的branch名字改成你新創建的branchName吧。

image-20250212130931767

三、協同方案分析

完成了上述,你已經有一個專門分支了吧?我的建議是每個電腦一個分支。我來舉個例子,比如你最新的進度是在Mac上寫的,并且分支名是main(github由于種族問題已經將默認分支master改成了main了),這個時候你想在windows電腦上寫一篇文章,然后你就寫,寫完之后hexo cleanhexo ghexo d一步沒落下,最終靜態文件被托管到了branch windows下。

這個時候你可能又回到了mac電腦上了,就需要同步一下博客的進度。所以你需要將main分支和windows分支同步即可。

具體的,如果長期在windows上寫博客,并且懶得更新原來的分支了,你可以在Gitpage將默認分支改為windows(非必需),將Gitpage的渲染的分支改為windows(必須)。

這里可以使用本方案:

下面的描述很人機因為是問的ChatGPT,不問DeepSeek是因為deepSeek服務器被打廢了。

1.切換到 main 分支

git checkout main

2.拉取 main 分支的最新更新

git pull origin main

3.切換到 wind 分支

git checkout wind

4.main 的更新合并到 wind

git merge main

這樣,wind 分支就會包含 main 分支的最新內容。如果有沖突,你需要手動解決沖突。

5.推送合并后的 wind 分支

git push origin wind

四、補充一個更加全面的備份方案

前面不是說了嘛,hexo不會將本地的文件上傳到Github博客的倉庫,那如果這個本地文件丟失了豈不是糟糕?上面也提到一種最簡單粗暴的備份方案,將sourceconfig直接扔到一個倉庫中。

但是,這種方案在分支備份大法前就顯得不那么優雅了。

因為在本地的hexo項目中無法使用git命令,所以我們要將遠程的倉庫克隆下來方便我們添加一個新的分支hexo,并在hexo中專門存放我們的本地項目文件。注意,之前提到的main分支或者說默認分支都是存放的hexo打包好的靜態頁面文件,我就不多提了。

具體的方法:

# 1.克隆遠程倉庫
git clone git@github.com:CCCCOOH/CCCCOOH.github.io.git(根據自己的倉庫來決定)# 2.cd到克隆下來的倉庫目錄下(這里省略,根據你的文件目錄來),然后創建一個新的分支hexo
git branch hexo# 3.將分支切換到hexo
git checkout hexo# 4.刪除原來的文件(單獨留下.git),將本地的文件(建議刪除public)拷貝到目錄下。
# 5.最后將分支推送到遠程(Githhub倉庫)
git add .
git commit -m '添加了hexo分支用于存放本地文件'
git push origin hexo

這里講給git小白聽。在第四步中你創建了hexo后,hexo默認會復制默認的分支,所以文件夾中的文件和默認分支一樣。我們不需要這些文件,將他們刪除,然后再拷貝你的本地文件到這個目錄下并推送到遠程就好了。

附一張備份文件目錄的圖。

image-20250212140203180

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895407.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源、免費項目管理工具比較:2025最新整理30款

好用的開源、免費版項目管理系統有:1.Redmine;2. Taiga;3. OpenProject; 4.ProjectLibre; 5.GanttProject; 6.Tuleap; 7.Trac;8. Phabricator; 9.Notion; 10.…

組織結構改革:激活企業活力的 “源頭活水”

難以適應市場變化、內部溝通與協作不暢、決策效率低下、運營成本增加、人才流失嚴重、員工士氣下降、戰略目標難以實現……企業如何根據市場環境變化和自身發展需求,靈活調整組織框架,賦能企業的持續健康發展? 某國有投資建設集團旗下的二級…

oracle中decode怎么轉換成pg

對于 PostgreSQL 中的 Oracle DECODE 函數,可以使用 CASE 表達式或聯合。CASE 表達式根據條件返回第一個匹配的結果,語法為:CASE WHEN 條件 THEN 結果 ELSE 結果 END。聯合通過 UNION ALL 操作符組合多個 SELECT 語句,返回一個包含…

Mac之JDK安裝

Mac之JDK安裝 一.安裝 jdk 打開終端輸入命令:java -version 查看是否已安裝 JDK Oracle 官方下載地址 根據自己Mac 系統安裝 查看 Mac 系統,打開中斷命令,輸入: uname -a Compressed Archive 是壓縮文檔,下載的是一個 .tar.gz 壓縮包 D…

【含文檔+PPT+源碼】基于Python的全國景區數據分析以及可視化實現

項目介紹 本課程演示的是一款基于Python的全國景區數據分析以及可視化實現,主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 包含:項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 帶你從零開始部署運行本套系統 該…

Unity中快速制作2D沙雕動畫:流程編

Unity中快速制作2D沙雕動畫(搞笑/無厘頭風格),通過以下方案實現低成本、高成效的開發流程,結合夸張的動作、滑稽的物理效果和魔性音效: 1. 角色與素材設計 核心原則:丑萌即正義,越怪越好&#…

保存字典類型的文件用什么格式比較好

保存 Python 字典類型的數據時,有幾個常見的格式可以選擇,這些格式都具有良好的可讀性和提取內容的便利性。以下是幾種推薦的格式: JSON 格式: 優點:JSON 格式非常適合存儲和傳輸結構化數據,具有良好的跨平…

SQL注入之布爾和時間盲注,sqli-labs

實驗環境: sqli-labs,小皮面板搭建,edge瀏覽器 apache:2.4.39,MySQL:5.7 PHP:5.39 Python(pycharm2023):3 less-8 布爾盲注: 1.我這里是采用最簡單的直接采…

基于SSM的農產品供銷小程序+LW示例參考

1.項目介紹 系統角色:管理員、農戶功能模塊:用戶管理、農戶管理、產品分類管理、農產品管理、咨詢管理、訂單管理、收藏管理、購物車、充值、下單等技術選型:SSM,Vue(后端管理web),uniapp等測試…

移植BOA服務器到GEC2440開發板

所需軟件:boa-0.94.13.tar.tar(下載:http://www.boa.org/boa-0.94.13.tar.gz) 步驟: 設置好交叉編譯工具鏈。 1、解壓下載好的壓縮包(tar xzvf boa-0.94.13.tar.tar),并進入解壓后的目錄(cd boa-0.94.13),再進行如下操作: 先進入到src目錄(下面操作都是在該目錄下進行…

Go 語言里中的堆與棧

在 Go 語言里,堆和棧是內存管理的兩個重要概念,它們在多個方面存在明顯差異: 1. 內存分配與回收方式 棧 分配:Go 語言中,棧內存主要用于存儲函數的局部變量和調用信息。當一個函數被調用時,Go 會自動為其…

從360度全景照片到高質量3D場景:介紹SC-Omnigs 3D重建系統

在當今的數字化時代,3D重建技術正在迅速發展,并廣泛應用于文旅、空間智能和3D重建等領域。為了簡化360度全景相機拍攝數據的處理流程,提高3D場景重建的質量和效率,我們開發了一款專門處理360度全景相機數據的3D重建系統——SC-Omnigs。本文將詳細介紹這一系統的功能、特點及…

LayUi table 列寬 th和td不同步變化

原因 在td所在的table中,當table寬度小于頁面寬度,滾動條會消失,進而table會被加以下樣式 style"width: auto"解決 在layui.js中將以下語句 !p&&h?y.width(o.getContentWidth(l)):y.width("auto")替換成 !…

HARCT 2025 分論壇10:Intelligent Medical Robotics智能醫療機器人

會議名稱:機電液一體化與先進機器人控制技術國際會議 會議簡稱:HARCT 2025 大會時間:2025年3月28日-30日 大會地點:中國桂林 主辦單位:桂林航天工業學院、廣西大學、桂林電子科技大學、桂林理工大學 協辦單位&…

前端可以不用依賴后端實現導出大數據了

theme: channing-cyan hightlight: channing-cyan 前言 在我們公司表格數據導出都是前端去處理。一開始數據量不大,倒沒什么問題。但隨著數據量的加大,問題也逐漸暴露出來。 一天的數據量有一來萬條,導出一定時間范圍的數據,30…

Java 后端開發:如何提取請求頭中的 Cookie 和身份驗證 Token

在 Java 后端開發中,處理 HTTP 請求時,經常需要從請求頭中提取特定的信息,如 Cookie 和身份驗證 Token。這些信息對于實現用戶會話管理、身份驗證和授權等功能至關重要。本文將詳細介紹如何在 Java 后端接口中提取請求頭中的 Cookie 和 Token…

游戲引擎學習第99天

倉庫:https://gitee.com/mrxiao_com/2d_game_2 黑板:制作一些光場(Light Field) 當前的目標是為游戲添加光照系統,并已完成了法線映射(normal maps)的管道,但還沒有創建可以供這些正常映射采樣的光場。為了繼續推進&…

通過 Docker 安裝和部署 KeyDB v6.3.4 的詳細步驟

KeyDB 是一種高性能的開源內存數據庫,最初是基于 Redis 項目開發的,但在性能、特性和功能上進行了許多增強和改進。它兼容 Redis 的大部分命令和數據結構,因此可以作為 Redis 的替代品使用,尤其是在需要更高性能和多線程支持的場景…

Android Studio 打包App問題

一、場景 windows 電腦C 盤空間越來越少,所有軟件默認位置都往C盤用戶目錄寫入數據,于是開始準備整理,Android Studio 相關的 .android 和 .gradle 目錄成為了目標。 二、問題出現 1、將C盤的.gradle 目錄拷貝到D盤,文件比較大&a…

鴻蒙HarmonyOS NEXT開發:橫豎屏切換開發實踐

文章目錄 一、概述二、窗口旋轉說明1、配置module.json5的orientation字段2、調用窗口的setPreferredOrientation方法 四、性能優化1、使用自定義組件凍結2、對圖片使用autoResize3、排查一些耗時操作 四、常見場景示例1、視頻類應用橫豎屏開發2、游戲類應用橫屏開發 五、其他常…