之前在 Astro 的 repository 看到一個 issue,問題大致上是他的網站放在 GitHub Pages 上,載入 /_astro/
下的檔案卻出現 404 錯誤。
我看到第一個想法是這應該是路徑的問題。因為 GitHub Pages 是放在 https://<user>.github.io/<repository>
這個網址上,放在 <repository>
這個 subdirectory 下又沒有設定 base
的話,路徑就會錯掉。只要在 Astro 的設定加上 base: "/<repository>"
就可以解決這個問題。
我原本是這麼想的,不過試了之後只有 /_astro/
下的檔案還是有 404 錯誤。我想了很久才想到 /_astro/
不是以 _
開頭的嗎?Astro 有以底線開頭就跳過不處理的規則,或許 GitHub Pages 也有?
還真的有。其實這個是 Jekyll 的規則,如果設定 GitHub Pages 的來源是 Deploy from a branch,GitHub 就會用 Jekyll 進行建置,以底線開頭的檔案就會跳過不處理,雖然實際上沒什麼需要處理的。
要讓 GitHub 跳過 Jekyll 建置的流程,只要在 repository 中放網站的 branch 的最上層加上 .nojekyll
檔案就行了。所以反推回來要在 Astro 專案的 public
資料夾放一個 .nojekyll
檔案。這個方法也確實解決了這個 issue。
Astro 文件也有部署到 GitHub Pages 的教學,不過他們並沒有提到關於 .nojekyll
檔案的問題,原因是部署的流程不一樣。issue 的作者是先將 Astro 建置的結果存在 gh-pages
branch,將它做為來源部署到 GitHub Pages。而 Astro 文件的方法則是用官方的 action,這個 action 會建置 Astro,然後將結果上傳,後面再接 actions/deploy-pages
action 就可以將上傳完成的結果部署到 GitHub Pages。這個方法不將建置結果存在 branch 就直接部署,所以就不會遇到以 Jekyll 建置會產生的問題。
所以要將 Astro 網站部署到 GitHub Pages 要注意兩件事情:
- 有沒有留意到可能需要加上
base
設定? - 建置的結果是存在 branch 再上傳到 GitHub Pages 的情況下,有沒有加上
.nojekyll
檔案?