引言
github上的demo別人需要預覽的時候都得clone下來執行才可以,不能外網訪問,不利於demo效果的展示,其實將專案打包部署到GitHub Pages上就可以完美解決這個問題了。
用到的庫
- gh-pages
- 安裝:
yarn add gh-pages
部署過程
建立專案倉庫
常規操作建立git倉庫即可,可參考:https://blog.csdn.net/zoucanfa/article/details/77725839
在本地的專案檔案下執行以下命令
$ git init
$ git add .
$ git commit -m `message`
$ git remote add origin <url>
$ git push -u origin master
修改本地的package.json檔案及相關配置
由於React專案和Vue專案打包後的資料夾不一樣,所以配置也稍稍有點不同
- React:
"homepage": "https://fighting123.github.io/react_manage_system",
"scripts": {
+ "predeploy": "npm run build", // 對應的deploy之前的鉤子
+ "deploy": "gh-pages -d build" // deploy名字可以隨意
},
- Vue:
"scripts": {
+ "predeploy": "npm run dist", // 或者yarn run dist
+ "deploy": "gh-pages -d dist"
},
並修改config/index.js:
build: {
assetsPublicPath: ``
}
部署
yarn deploy // 或npm run deploy
部署過程真的感覺超級慢。。。
部署成功後,對應遠端上就有新的gh-pages分支了,修改setting上的source為gh-pages分支,然後開啟https://fighting123.github.io…。
總結
總體來看,它的原理其實很簡單,就是在當前專案倉庫下自動建立一個名為gh-pages的分支,打包部署成功之後上傳到這個分支的正好就是build內的靜態檔案,其實不怕麻煩的同學也可以不用這個庫,自己一步步建立分支,上傳build檔案也可以實現同樣的效果!
遇到的問題及解決方法
-
執行yarn deploy過程中可能會報錯
fatal: A branch named `gh-pages` already exists.
官方文件上的解釋是:
當處理gh-pages模組生成檔案.cache,如果由於某些原因如密碼錯誤等卡住則不會自動清理
解決辦法:
執行 ~node_modules/gh-pages/bin/gh-pages-clean 或者直接刪除專案下的 ~node_modules/gh-pages/.cache檔案即可
-
執行yarn deploy過程中可能會報錯
fatal: The remote end hung up unexpectedly
官方文件上的解釋是:
通過 HTTP 傳輸 POST 資料到遠端系統上的最大緩衝位元組數 。當請求大於這個緩衝大小時,HTTP/1.1 和 Transfer-Encoding: chunked 用來避免在本地建立過多的壓縮檔案。預設是 1MiB,適用於大多數的請求
解決辦法:
git config --global http.postbuffer 1048576000
-
執行yarn deploy過程中可能會報錯
could not read Username for `https://github.com`: No error
解決辦法:
修改.git下的config檔案的url為https://使用者名稱:密碼@github.com/fighting123/react_manage_system.git即可
-
多個html檔案的專案,如官網,用下面方法:
git symbolic-ref HEAD refs/heads/gh-pages git add -A git commit -m "描述" git push origin gh-pages
參考文章:
- https://www.jianshu.com/p/9dc…
- https://www.cnblogs.com/MuYun…
- https://www.douban.com/note/6…
- https://www.rails365.net/movi… (把 react 應用部署到 GitHub Pages的視訊)