hexo-staging

Mit Rum- und Ausprobieren und ein Doku-Lesen bin ich mit mich Hexo schon relativ weit gekommen.

Grundsätzlich hat Hexo zwei verschiedene Modi:

  • hexo generate läuft alle Routen durch, rendert die dazugehörigen Seiten und speichert sie als statische Files auf die Platte. Die generierten Dateien laden bei mir im Live-System und werden da von einem Nginx ausgeliefert.
  • hexo server startet einen Server und rendert dynamisch die angefragte Seite. Der Server ist etwas träge, hat aber einen Watcher und ich nutze das lokal zum Entwickeln.

Die zwei Prozesse getrennt zu haben, ist schon praktisch, aber mir fehlte noch ein Staging mit dem ich zwischen Development und Production unterscheiden und switchen kann. Daher hab ich mein erstes Hexo Plugin geschrieben, dass Hexo um einen einfachen Staging-Mechanismus erweitert.

Installation

Einfach nur per npm installieren:

cd /root/of/your/hexo/project

npm install hexo-staging

Staging in der _config.yml

In der Config fügt mal einen neues Stagings ein; darin pro Staging die Einstellungen, die für das Staging geändert werden sollen. Die Staging Namen sind überigens egal; ich benutze production und development.

title: "Samisdat"
url: "http://example.com"

stagings:
  development:
    title: "Samisdat Dev"
    url: "http://example.local"

Ob die Einstellungen korrekt sind, läßt sich leicht testen:

hexo config url
#http://example.com

Per Parameter läßt sich das jeweilige Staging aktivieren und dann sollten auch die Einstellungen ensprechen überschrieben sein.

hexo config url --staging development
#http://example.local

Folgende Hexo Befehle akzeptieren ein Staging per Parameter

hexo config
hexo deploy
hexo generate
hexo server

Conditional Tag

Außer den stagebaren Einstellungen bringt das Plugin noch ein neues Conditional Tag für die Templates mit:

<% if (true === is_staging("development")){ %>
    <%- css('style.css') %>
<% } else { %>        
    <%- css('style.min.css') %>
<% } %>