自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用GitHub Pages和GitHub Actions部署React應(yīng)用

系統(tǒng)
我認(rèn)為使用GitHub頁面部署這個站點是非常簡單的,然而,我錯了。經(jīng)過反復(fù)試驗,我設(shè)法解決了這個問題。本文的目的是重新創(chuàng)建該場景,并帶領(lǐng)您完成解決我們一路上遇到的每個問題的過程。

原文:https://codeburst.io/deploying-a-react-app-using-github-pages-and-github-actions-7fc14d380796

作者:Clyde D'Souza

介紹

我最近用Create React App starter模板創(chuàng)建了一個網(wǎng)站來演示我開發(fā)的一個npm包。我認(rèn)為使用GitHub頁面部署這個站點是非常簡單的,然而,我錯了。經(jīng)過反復(fù)試驗,我設(shè)法解決了這個問題。本文的目的是重新創(chuàng)建該場景,并帶領(lǐng)您完成解決我們一路上遇到的每個問題的過程。

1.起點

讓我們從一個共同的基礎(chǔ)開始。我們先用Create React App工具創(chuàng)建一個React應(yīng)用,同時將代碼添加到GitHub倉庫。我使用了以下命令來生成這個示例React應(yīng)用。

  1. npx create-react-app <project directory> --template typescript 

此時,你的項目目錄應(yīng)該看起來像下面的截圖。我沒有添加或修改任何東西--這些是當(dāng)我們運行上述npx命令時,開箱即生成的文件和文件夾。我只是通過運行 npm run start 命令來確保它在本地工作,僅此而已。

我已經(jīng)把這些改動推送到了我的 GitHub 倉庫,如果你也在關(guān)注,你也可以這樣做。如果你想比較一下,這是我的版本庫現(xiàn)階段的樣子。

2.部署到GitHub Pages

當(dāng)我們運行 npm run build 命令時,Create React App會將生產(chǎn)文件放入 build 目錄中。然而,如果你看一下 .gitignore 文件,你會發(fā)現(xiàn)構(gòu)建目錄被添加到這個列表中,因此,你無法將這個文件夾的內(nèi)容提交到GitHub。那么,我們該如何發(fā)布我們的應(yīng)用呢?

GitHub Actions

讓GitHub Actions來拯救我們吧!我們需要在每次代碼提交時構(gòu)建我們的應(yīng)用程序,這就是GitHub Actions的作用。在你的應(yīng)用程序的 .github/workflows 目錄下創(chuàng)建一個名為 build-deploy.yml 的文件。將以下內(nèi)容粘貼到這個YAML文件中。這是我的GitHub倉庫在這個階段的樣子。

  1. name: Build & deploy 
  2.  
  3. on
  4.   push: 
  5.     branches: 
  6.       - main 
  7.   pull_request: 
  8.     branches: 
  9.       - main 
  10.  
  11. jobs: 
  12.   build: 
  13.     name: Build 
  14.     runs-on: ubuntu-latest 
  15.      
  16.     steps: 
  17.     - name: Checkout code 
  18.       uses: actions/checkout@v2 
  19.      
  20.     - name: Install Node.js 
  21.       uses: actions/setup-node@v1 
  22.       with
  23.         node-version: 13.x 
  24.      
  25.     - name: Install NPM packages 
  26.       run: npm ci 
  27.      
  28.     - name: Build project 
  29.       run: npm run build 
  30.      
  31.     - name: Run tests 
  32.       run: npm run test 
  33.  
  34.     - name: Upload production-ready build files 
  35.       uses: actions/upload-artifact@v2 
  36.       with
  37.         name: production-files 
  38.         path: ./build 
  39.    
  40.   deploy: 
  41.     name: Deploy 
  42.     needs: build 
  43.     runs-on: ubuntu-latest 
  44.     if: github.ref == 'refs/heads/main' 
  45.      
  46.     steps: 
  47.     - name: Download artifact 
  48.       uses: actions/download-artifact@v2 
  49.       with
  50.         name: production-files 
  51.         path: ./build 
  52.  
  53.     - name: Deploy to gh-pages 
  54.       uses: peaceiris/actions-gh-pages@v3 
  55.       with
  56.         github_token: ${{ secrets.GITHUB_TOKEN }} 
  57.         publish_dir: ./build 

最近我寫了這篇文章,解釋了GitHub Actions的基本原理,這里就不多說了??偨Y(jié)一下,這個YAML文件定義了GitHub Actions中的工作流程。這個工作流會在每次推送變更到主分支或創(chuàng)建拉請求合并變更到主分支時被觸發(fā),它將構(gòu)建React應(yīng)用,并將 build 目錄的內(nèi)容部署到 gh-pages 分支。

關(guān)于 ${{ secrets.GITHUB_TOKEN }} 的快速注釋——GitHub自動創(chuàng)建一個 GITHUB_TOKEN 密鑰以在您的工作流程中使用。因此,它具有對存儲庫的寫訪問權(quán),因此,您可以更新 gh-pages 分支。

如果您繼續(xù)學(xué)習(xí),請將此文件提交到存儲庫。馬上,您就會注意到GitHub Pages現(xiàn)在將基于您在工作流文件中的內(nèi)容進行構(gòu)建。如果您轉(zhuǎn)到GitHub中的Actions選項卡,您將看到您的工作流正在執(zhí)行,并且在一段時間后有望被標(biāo)記為成功。請隨意單擊UI并探索GitHub存儲庫的這個區(qū)域。

假定狀態(tài)顯示為成功,此操作還將創(chuàng)建一個名為 gh-pages 的新分支,并將在其中部署生產(chǎn)就緒代碼。

很簡單,不是嗎?

GitHub Pages

現(xiàn)在我們已經(jīng)將構(gòu)建文件放到了不同的分支中,讓我們繼續(xù)啟用 GitHub Pages。點擊菜單中的Settings,然后向下滾動到 GitHub Pages 部分。

在這里,我們將配置網(wǎng)站內(nèi)容的位置。由于我們的構(gòu)建文件已推送到 gh-pages 分支,因此請從下拉列表中進行選擇。點擊Save按鈕,頁面會刷新,當(dāng)你向下滾動到這部分時,你會看到一個網(wǎng)址。點擊該網(wǎng)址,即可看到網(wǎng)站。

等等,怎么了?我看不到React應(yīng)用的輸出,你能看到嗎?

您可能會看到一個空白的屏幕,并且如果打開控制臺,則會看到很多錯誤。

提示:如果你沒有看到空屏,而是看到GitHub的404信息,請等待幾分鐘,換個瀏覽器試試,最后,嘗試清除緩存。由于這將是你第一次訪問網(wǎng)站,它可能還沒有在后臺更新東西。

請注意它試圖獲取JavaScript和CSS文件的URL——它使用的是基礎(chǔ)URL,但沒有使用路徑 create-react-app-ghpages-demo。顯然,由于基礎(chǔ)URL中不存在JavaScript或CSS文件,我們得到了一個404錯誤。

只有當(dāng)你的項目站點使用的是GitHub Pages,即格式為 https://.github.io/ / 時,才會出現(xiàn)這個錯誤。如果你的版本庫使用 .github.io 的格式命名,那么啟用GitHub Pages后可能不會出現(xiàn)上述錯誤。這是因為你的網(wǎng)站不再部署在根目錄下,而是部署在更深一層的 https://.github.io/ /。

那么,我們?nèi)绾谓鉀Q這個問題呢?讓我們來看看。

3.設(shè)置首頁值

打開這個應(yīng)用的源代碼,在 package.json 文件中,添加這個鍵值對,適當(dāng)替換下面URL中的部分。

  1. "homepage""https://<username>.github.io/<project>/"

在我的實例中,這是我必須添加的內(nèi)容:

  1. "homepage""https://clydedz.github.io/create-react-app-ghpages-demo/"

做完這個改動后,把它推送到GitHub上。這將觸發(fā)一次構(gòu)建和部署。

給它一兩分鐘,然后再次訪問網(wǎng)站?,F(xiàn)在你應(yīng)該看到你的React應(yīng)用已經(jīng)啟動并運行了。萬歲!

4.添加React Router

接下來,我們就來看看在React應(yīng)用中添加Router的常見場景。會不會無縫運行?還是會再次遇到錯誤?讓我們一探究竟吧。

我將使用React Router來完成這個任務(wù),我將輸入以下命令來安裝這個npm包。

  1. npm install --save react-router-dom 

我按照基本的例子添加了三個路由。這三條路由分別指向三個獨立的React組件。這是我的GitHub倉庫在添加React Router后的樣子。

如果你運行 npm run start 命令,你將能夠觀察到一個非常奇怪的行為。

  • 它的開頭是http://localhost:3000/create-react-app-ghpages-demo,但頁面只包含導(dǎo)航鏈接,沒有其他內(nèi)容。
  • 點擊“關(guān)于”鏈接將URL更新為http://localhost:3000/about,現(xiàn)在會顯示一些內(nèi)容。然而,由于URL中完全刪除了 create-react-app-ghpages-demo 的值,我們已經(jīng)不在正確的網(wǎng)站上了(硬刷新該URL會出現(xiàn)錯誤)。

無論如何將這些更改提交到GitHub上(你可能還需要更新你的單元測試)。在成功部署后,你應(yīng)該也能在線復(fù)制這種行為。這顯然不是很理想。

5.解決路由錯誤

造成這種奇怪行為的原因是現(xiàn)在路由器認(rèn)為網(wǎng)站是從根目錄服務(wù)的。這是不正確的--演示應(yīng)用程序是由一個子目錄提供服務(wù)的--因此出現(xiàn)了不匹配。

要解決此問題,請更新以下代碼行:

  1. <Router> 

  1. <Router basename={process.env.PUBLIC_URL}> 

process.env.PUBLIC_URL 的值將是 / 。basename 屬性允許我們指定路由的實際基礎(chǔ) URL,在本例中,它將是子目錄。

現(xiàn)在剩下的就是讓我們測試該演示網(wǎng)站,并確認(rèn)它可以像魅力一樣工作。

就是這樣!謝謝閱讀。

本文轉(zhuǎn)載自微信公眾號「前端全棧開發(fā)者」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系前端全棧開發(fā)者公眾號。

責(zé)任編輯:武曉燕 來源: 前端全棧開發(fā)者
相關(guān)推薦

2022-11-15 17:07:40

開發(fā)自動化前端

2019-11-26 08:00:00

GitHubGitHub ActiAzure

2024-01-24 18:50:21

WebFTP服務(wù)器

2014-09-01 09:49:24

github

2018-03-15 09:10:34

GitHub博客 Python

2024-02-20 08:08:43

2024-12-31 09:46:45

2018-04-16 13:56:31

GitHubPythonFlask

2022-12-21 08:20:01

2020-12-04 10:42:54

GithubSSDNode.js

2021-03-26 08:41:11

Go語言Docker

2023-09-05 08:00:00

開源GreptimeDB

2020-09-01 20:53:26

DocsifyGitHub Page文檔網(wǎng)站

2024-12-02 07:00:00

特性標(biāo)記軟件開發(fā)Action

2021-01-18 18:30:49

服務(wù)器開發(fā)工具

2021-10-03 14:47:26

Fedora CoreGitHub Acti運行器

2021-01-19 05:26:22

Github ActiJenkinsDevOps

2021-04-20 09:36:49

黑客網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2022-05-27 08:55:15

工具自動化軟件

2022-07-13 09:17:42

Azure虛擬機加密貨幣云資源
點贊
收藏

51CTO技術(shù)棧公眾號