游諭 Swift Dev 🦄

[#1] 如何透過 Publish 使用 100 % Swift code 建立 Blog

起源: 2019 年, 接觸了剛起步的 Swift by Sundell, Sundell 是一個全職的作者, 不僅每週有固定的文章與 Podcast, 還不時的在各大 Swift 有關的演講分享, 而在 2019 年 12 月底, Sundell 推出了 Publish

Jhon Sundell @SwiftServerConf, 2019/11

Publish 於 2020 年 1 月 版號是 v0.1.0, 代表 還有不少的功能還沒實現, Sundell 對於新功能是採用 PR please 的方式, 也就是不接受 issue, 只接受貢獻, 因此某種程度是更新較慢的.

Publish 框架環境與安裝

  1. Swift 5.1
  2. Swift Package manager: swift-tools-version:5.1
  3. PublishCLI: Publish v0.1.0

Step 1: 安裝 Publish

git clone https://github.com/JohnSundell/Publish.git
cd Publish
make

透過 MakeFile, 將安裝 publish-cli/usr/local/bin/, 就可以使用 publish

Step 2: 靜態網頁建立

mkdir __WEBSITE_NAME__ 
cd __WEBSITE_NAME__
publish new

透過 PublishCLI 建立 Package.swift, 之後可以用 XCode 編輯

Publish 整體架構

├── Content/
│   ├── index.md
│   └── posts/
│       ├── first-post.md
│       └── index.md
├── Package.swift
├── Resources/
└── Sources/
    └── __WEBSITE_NAME__/
        └── main.swift

Publish 框架下使用 SPM 來處理整個由 Read *.md ~> gen *.html, Theme.css ~> Site metadata 的過程, 程式相依資源是由 Package.swift控制, 分頁的讀取由 main.swift觸發, 文章的來源是相依從 Content/ 取得, 主要設計由 main.swift 的 try SomeWebsite().publish(...), 其中包含基本網站的 metaData, building 的介入 等.

import Foundation
import Publish
import Plot

// This type acts as the configuration for your website.
struct Publishdemo: Website {
    enum SectionID: String, WebsiteSectionID {
        case posts
    }

    struct ItemMetadata: WebsiteItemMetadata {
        // Add any site-specific metadata that you want to use here.
    }

    // Update these properties to configure your website:
    var url = URL(string: "https://your-website-url.com")!
    var name = "Publishdemo"
    var description = "A description of Publishdemo"
    var language: Language { .english }
    var imagePath: Path? { nil }
}

try Publishdemo().publish(withTheme: .foundation)

使用 GitHub page 作為 發佈空間

GitHub 在每個賬號下可以有固定一個免費的靜態網站的空間, 原意是可以作為 open source 的 doc 或是基本的 intro, 而作為個人使用賬號, 可以用來作為個人的 blog. 1. 與GitHub 建立一個 repo, 名稱必須是該賬號.github.io , 這樣才可以被 GitHub 識別. 2. (很重要) 不要對哪個 repo 作任何 push. 3. 與你的 main.swift 內建的.publish(withTheme:)修改為一下

try MyWebSite().publish(
    withTheme: .foundation,
    deployedUsing: .git("https://github.com/ytyubox/ytyubox.github.io")
)
  1. 使用 terminal 指令 publish deploy 直接上傳到 GitHub.
Tagged with: