如何自动部署React应用程序到Firebase

517 阅读6分钟

本教程包括

  1. 构建一个React应用样本
  2. 在Firebase上设置和配置该应用
  3. 创建一个持续部署管道

许多平台为React和其他JavaScript框架提供免费托管服务。这些框架可用于构建单页应用程序,当你需要推出最小可行产品或快速概念验证时,这很方便。你的开发者同伴正在利用这些工具,你也可以。为了缩小选择范围,我将在本教程中重点介绍Firebase。

Firebase是一个由谷歌开发的开发平台,提供文件存储、托管、数据库、认证和分析。Firebase是免费的,默认提供一个SSL证书,并在多个地区提供令人印象深刻的速度。

在本教程中,你将学习如何通过使用CircleCI设置持续部署管道来在Firebase上托管你的React应用。

前提条件

在本教程中,你将需要

克隆演示项目

首先,在GitHub上克隆本教程的演示项目。使用Git发出以下命令。

git clone https://github.com/yemiwebby/react-app-firebase.git

这个演示程序从一个免费的Rest API中获取假用户列表用于测试

接下来,进入新克隆的应用程序,安装其依赖性并运行应用程序。

// change directory
cd react-app-firebase
    
// install dependencies
npm install
    
// Run the application
npm run start

转到http://localhost:3000 ,在本地查看主页。

image.png

现在你知道演示应用程序正在工作,你准备在Firebase上建立一个项目。

在Firebase上建立一个项目

你需要一个免费的账户来访问Firebase所能提供的所有功能,所以打开一个Firebase账户,进入Firebase控制台页面。

image.png

接下来,使用下面的步骤。

  1. 点击添加项目按钮。
  2. 为你的项目输入一个名称。我把我的命名为react-app-firebase 。请记住,项目ID在Firebase中是唯一的。
  3. 点击继续
  4. 禁用Google Analytics;这个项目不需要它。
  5. 再次点击继续

你已经成功地在Firebase上创建了一个项目。

配置Firebase主机

要在Firebase上成功托管你的应用程序,你需要安装它的工具并在你的项目中初始化它。

打开一个新的终端。运行这个命令来全局安装Firebase工具。

npm install -g firebase-tools

一旦安装完成,你现在可以在全局范围内访问Firebase命令行界面工具。你可以用它们来部署代码和资产到你新创建的Firebase项目。

将React连接到Firebase

从终端,登录到你的Firebase账户。

firebase login

这个命令会打开一个浏览器并提示你选择一个账户。

接下来,确保你在react-app-firebase 项目的根目录下,发出这个命令来初始化它。

firebase init

你会被提示回答一些问题。

  • 选择主机。为Firebase主机配置文件,(可选择)设置GitHub Action部署。
  • 使用一个现有的项目。选择你之前创建的Firebase项目(react-app-firebase)。
  • 输入build 作为公共目录。
  • 配置成一个单页的应用程序。Yes.
  • 用GitHub设置自动构建和部署。No.在本教程中,我们使用CircleCI来运行测试和处理部署。

下面是终端的输出。


     ######## #### ########  ######## ########     ###     ######  ########
     ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##
     ######    ##  ########  ######   ########  #########  ######  ######
     ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##
     ##       #### ##     ## ######## ########  ##     ##  ######  ########
    
You are about to initialize a Firebase project in this directory:
    
  /Users/yemiwebby/tutorial/circleci/react-app-firebase
    
? Which Firebase features do you want to set up for this directory? Press Space to select features, th
en Enter to confirm your choices. Hosting: Configure files for Firebase Hosting and (optionally) set u
p GitHub Action deploys, Hosting: Set up GitHub Action deploys
    
=== Project Setup
    
First, lets associate this project directory with a Firebase project.
You can create multiple project aliases by running firebase use --add, 
but for now we will just set up a default project.
    
? Please select an option: Use an existing project
? Select a default Firebase project for this directory: react-app-firebase-52972 (react-app-firebase)
i  Using project react-app-firebase-52972 (react-app-firebase)
    
=== Hosting Setup
    
Your public directory is the folder (relative to your project directory) that
will contain Hosting assets to be uploaded with firebase deploy. If you
have a build process for your assets, use your builds output directory.
    
? What do you want to use as your public directory? build
? Configure as a single-page app (rewrite all urls to /index.html)? Yes
? Set up automatic builds and deploys with GitHub? No
✔  Wrote build/index.html
    
i  Writing configuration info to firebase.json...
i  Writing project information to .firebaserc...
    
✔  Firebase initialization complete!

项目的初始化过程还在你的项目根部生成了两个独特的文件。这些文件是成功部署的必要条件,必须检查到源控制中。

  • firebase.json 包含你的项目的主机配置。它指示Firebase CLI在你的项目目录中上传和部署的文件。
  • .firebaserc 指定项目在你成功部署到Firebase后连接到上传的代码。

配置CircleCI

配置文件已经存在于克隆的项目中。转到.circleci/config.yml 。打开它并确保它与此相符。

version: 2.1
jobs:
  build:
    working_directory: ~/project
    docker:
      - image: cimg/node:17.4.0
    steps:
      - checkout
      - run:
          name: Update NPM
          command: "sudo npm install -g npm"
      - restore_cache:
          key: dependency-cache-{{ checksum "package-lock.json" }}
      - run:
          name: Install Dependencies
          command: npm install
      - run: npm install --save-dev firebase-tools    
      - save_cache:
          key: dependency-cache-{{ checksum "package-lock.json" }}
          paths:
            - ./node_modules
      - run:
          name: Build application for production
          command: npm run build 
      - run:
          name: Deploy app to Firebase
          command: ./node_modules/.bin/firebase deploy --token=$FIREBASE_TOKEN  
workflows:
  build-and-deploy:
    jobs:
      - build

这个配置指定了在CircleCI上安装和构建React应用程序所需的所有工具。它将Firebase工具与npm install --save-dev firebase-tools ,并设置了一个命令,一旦测试成功,就自动将你的应用程序部署到Firebase。

部署将需要FIREBASE_TOKEN 。你从终端登录,所以你可以使用Firebase CLI轻松创建一个令牌。输入这个命令。

firebase login:ci

这将打开一个浏览器,在那里你可以验证你的账户。然后,令牌会被打印在你的终端中。

复制它并把它保存在方便的地方。在本教程的后面,你会需要它。

下一步是在GitHub上建立一个仓库,并将项目链接到CircleCI。查看推送项目到GitHub的说明。

一旦你的GitHub仓库被更新了,登录你的CircleCI账户。如果你用你的GitHub账户注册,你所有的仓库都会在你的项目仪表板上显示出来。

接下来,找到你的react-app-firebase 项目,并点击设置项目

image.png 你会被提示写一个新的配置文件或使用现有的配置文件。选择现有的,并输入你的代码在GitHub上存放的分支的名称。点击Set Up Project

你的第一个工作流将开始运行。不过构建会失败,因为你还没有创建FIREBASE_TOKEN 环境变量。 image.png

要解决这个问题,你需要把FIREBASE_TOKEN 作为一个环境变量。点击项目设置,然后点击左侧边栏的环境变量。创建这个变量。

  • FIREBASE_TOKEN 是你先前从终端生成的令牌的值。

回到仪表板上,点击从失败中重新运行工作流程。这将触发工作流,现在已经成功构建了。

image.png

转到上一步中显示的托管URL。对我来说,这个URL是。https://react-app-firebase-52972.web.app.

image.png

总结

在本教程中,我们回顾了在Firebase上托管一个React应用程序的逐步过程。你下载了一个现有的React应用,并利用CircleCI基础设施来确保该应用的部署不需要任何人工干预。

这里解释的过程既适用于现有的也适用于新的React应用程序。