如何在 Github Page 中使用环境变量?

IT技术 reactjs github github-pages create-react-app
2021-03-31 09:22:49

我想将我的create-react-app项目部署到 GitHub Pages。但我有一些秘密钥匙。如何在我的 React 应用程序中管理这些密钥?

6个回答

2020 年 6 月编辑

参考@alicia-jasmine

“React 纯粹是一个前端框架。React 可访问的所有内容(即使您通过构建步骤嵌入它)稍后将在前端代码中可见,并且可以找到相对基本的人。要真正保持它们的秘密,您必须拥有服务器端的东西!”

以下答案实际上会在 GitHub 上的 gh-page 分支中公开密钥,并且可以通过开发人员控制台中的网络选项卡访问这些密钥。

原答案

我也在使用create-react-app,我发现这可以通过使用 GitHub 机密设置自定义 CI 脚本来完成。(设置完成后,你就可以在你的项目中使用这样的环境变量了。)

const apiKey = process.env.REACT_APP_APIKey
const apiSecret = process.env.REACT_APP_APISecret

要将秘密添加到您的存储库,请转到您的存储库的Setting > Secrets,单击Add a new secret在下面的屏幕截图中,我添加了 2 个 env 变量:REACT_APP_APIKeyREACT_APP_APISecret.

注意:所有要通过 create-react-app 访问的环境变量都需要以REACT_APP.

在此处输入图片说明

在你准备好你的秘密后,你可以看看这篇文章,它是关于如何在推送时添加你自己的动作。

要设置您的操作脚本,请转到您的存储库 >操作,单击您自己的设置工作流,然后粘贴帖子中提供的脚本或查看下面的我的脚本。

在此处输入图片说明

我使用以下脚本访问我在 GitHub secret 上设置的 2 个环境变量。(您可以通过 访问您在脚本中设置的秘密${{ secrets.REACT_APP_APIKey }}。)

name: CI

on:
  push:
    branches:
      - master

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    
    - name: Checkout
      uses: actions/checkout@v1

    - name: Build
      run: |
        npm install
        npm run-script build
      env:
        REACT_APP_APIKey: ${{ secrets.REACT_APP_APIKey }}
        REACT_APP_APISecret: ${{ secrets.REACT_APP_APISecret }}

    - name: Deploy
      uses: JamesIves/github-pages-deploy-action@releases/v3
      with:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        BRANCH: gh-pages
        FOLDER: build

设置脚本后,任何推送到master 分支都会触发该操作推送任何提交后,您可以在操作状态查看部署状态。

你可以看到我很难弄清楚......这么多失败的尝试,哈哈。无论如何,希望这会有所帮助:)

在此处输入图片说明

我已经制作了一个 dev 文件和 prod 文件(用于密钥),但是在此 CI 测试期间,由于找不到 dev 文件,构建失败,有什么解决方法?
2021-05-30 09:22:49
你好,我做了所有的步骤,但我无法访问 process.env.anyvariable。
2021-06-01 09:22:49
你好,我今天早上通过删除秘密并再次设置它们来尝试回来,现在它可以工作了!通过手动分配,我的意思是在我的操作中,我有这样的事情:``` env: REACT_APP_APIKey: 2 #This 正确显示了值 REACT_APP_APISecret: ${{ secrets.REACT_APP_APISecret }} #this one is not ``` 现在正在工作有秘密所以谢谢你的回复!
2021-06-01 09:22:49
刚刚编辑:您应该将环境变量放在 Build 步骤下env:
2021-06-08 09:22:49
@AntonCheng thx。在所有的失败之后,我终于能够使用来自 secrets 的 env 变量部署我的 gh-page 分支。然而github出人意料地再次撤销了我的“PERSONA_ACCESS_TOKEN”。当我查看错误提交时,它表明我的令牌再次以纯文本形式显示。我很困惑为什么会这样。我天真的猜测:我们在构建步骤中获得了 env,然后部署它,这是否意味着我们仍然将普通机密放在构建文件夹中然后将其推出?
2021-06-21 09:22:49

如果它们真的是秘密的,所以不应该在存储库中,那么没有办法使用 github-pages 来管理它。

如果您同意将它们放在存储库中,则将它们放在 .env 中并通过 process.env 访问

name: Deploy to GitHub Pages
    on:
      push:
        branches:
          - master
    jobs:
      build-and-deploy:
        runs-on: ubuntu-latest
        steps:
        - name: Checkout
          uses: actions/checkout@v1

        - name: Build
          run: |
            npm install
            npm run-script build
          env:
            REACT_APP_INSTAGRAM_ACCESS_TOKEN: ${{ secrets.REACT_APP_INSTAGRAM_ACCESS_TOKEN }}
            REACT_APP_SMTP_SECURE_TOKEN: ${{ secrets.REACT_APP_SMTP_SECURE_TOKEN }}

        - name: Deploy
          uses: JamesIves/github-pages-deploy-action@releases/v3
          with:
            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN_KEY }}
            BRANCH: gh-pages
            FOLDER: dist

您可以像这样使用从 GitHub 机密中添加环境变量。这解决了我的问题。

这是正确的脚本:将变量放在构建步骤下 run-script build
2021-06-21 09:22:49

我支持这个答案(上)

但我建议将gh-pages YML更新版本 4

还要看看环境变量解决方案,因为我花了几个小时来找出解决方案

      - name: Deploy
        uses: JamesIves/github-pages-deploy-action@4.0.0
        with:
          branch: gh-pages
          folder: front-app/dist
但尽管如此,我和那个答案并没有帮助,我仍在寻找一种将环境变量传递给 react-app 的方法。我已经尝试过dotenv lib 但它也没有用
2021-06-02 09:22:49

要使用环境变量,遵循的一般方法是:

  • 不让他们暴露在公众面前
  • 在开发/生产时将其保留在本地并在.gitignore文件中忽略
  • 从您的应用程序中构建静态版本,然后将其部署到 github 页面或任何其他静态网站主机。

同时与create-react-app您合作有其好处,您可以.env在您的文件夹中创建.env文件的结构应遵循以下键值结构:-

REACT_APP_SECRET_CODE1=dev123
REACT_APP_SECRET_CODE2=prod456

文件中的键应以 为前缀,REACT_APP您可以使用这些键访问应用程序中的变量。例如。process.env.REACT_APP_SECRET_CODE,这将具有valuedev123

我不知道为什么这会被否决,因为就本地开发而言,它所说的一切都是正确的,而这取决于您的部署方式。例如,如果您正在部署构建目录(这些值将被烘焙,这可能是不可取的),或者如果您正在使用 github 操作或其他东西,您需要在那里单独设置环境变量,因为构建是远程进行的。
2021-06-04 09:22:49