Reactjs App Engine App.yaml处理程序,用于内置React应用程序

Reactjs App Engine App.yaml处理程序,用于内置React应用程序,reactjs,google-app-engine,google-cloud-platform,gcloud,app-engine-flexible,Reactjs,Google App Engine,Google Cloud Platform,Gcloud,App Engine Flexible,我正在尝试将React应用程序(使用创建React应用程序创建)的生产构建部署到gcloud应用程序引擎灵活环境中 运行npm run build后,已创建build文件夹: 这是我的应用程序。yaml: # [START runtime] runtime: nodejs env: flex # [END runtime] # [START handlers] handlers: - url: / static_files: build/index.html upload

我正在尝试将React应用程序(使用创建React应用程序创建)的生产构建部署到gcloud应用程序引擎灵活环境中

运行
npm run build
后,已创建build文件夹:

这是我的应用程序。yaml:

# [START runtime]
runtime: nodejs
env: flex
# [END runtime]

# [START handlers]
handlers:
  - url: /
    static_files: build/index.html
    upload: build/index.html
  - url: /
    static_dir: build
  # [END handlers]
部署到App Engine时,版本配置显示:

runtime: nodejs
api_version: '1.0'
env: flexible
threadsafe: true
handlers:
  - url: /
    application_readable: false
    static_files: build/index.html
    require_matching_file: false
    upload: build/index.html
  - url: '/(.*)'
    application_readable: false
    static_files: "build/\\1"
    require_matching_file: false
    upload: 'build/.*'
automatic_scaling:
  min_num_instances: 2
  max_num_instances: 20
  cpu_utilization:
    target_utilization: 0.5

正在提供开发应用程序,而不是生成文件夹中的生产版本。我做错了什么?

部署GAE应用程序/服务时,包含正在部署的应用程序/服务的
app.yaml
文件的目录被视为应用程序/服务的顶级目录,该目录的内容就是正在部署的内容。在你的例子中,它与我怀疑你所称的开发版本相匹配

如果您希望您的
build
目录成为应用程序/服务的顶级目录,那么您需要:

  • build
    dir中创建一个
    app.yaml
    文件(手动或指示您的构建过程这样做)

    注意:您需要调整该文件中的路径,因为应用程序目录中不再有
    build
    目录。或者尝试在其内部创建一个
    build->.
    symlink到自身,可能允许在不调整路径的情况下使用现有的
    app.yaml
    内容(但不是100%确定这会起作用)

  • 部署
    build/app.yaml
    文件,而不是顶部(
    bsn
    )目录中的文件


修改
package.json中的脚本,让GAE使用
service
build
目录而不是根目录提供服务

部署后,GAE将运行
npm start
,开始为您的应用程序提供服务。通过更改
start
脚本映射到的内容,您可以根据需要使用
build
目录。在使用此设置进行本地开发时,您必须使用
npm run local
,因为您正在更改
npm start
的操作

此过程要求您在部署到GAE之前运行
npm run build
。这将为您提供
build
目录,但它不会自动为您运行构建过程,因此必须这样做才能提供
/src
中的最新代码

资料来源:

代码:

"scripts": {
  "start": "serve -s build",
  "prestart": "npm install -g serve",
  "local": "react-scripts start",
  "build": "react-scripts build",
  "test": "react-scripts test --env=jsdom",
  "eject": "react-scripts eject"
}

GAE将运行
npm start
运行您的react应用程序。因此,您需要配置package.json以告知GAE为您的构建文件夹服务:

  "scripts": {
    "start": "serve -s build",
    ...
  },
还需要相应地配置
.yaml
文件:

handlers:
  - url: /
    static_files: build/index.html
    upload: build/index.html
  - url: /(.*)$
    static_files: build/\1
    upload: build/(.*)

为了进行部署,您部署的文件夹中必须有app.yaml文件,如果您在build文件夹中运行gcloud app delpoy,您将收到一个错误,因为那里没有package.json文件。默认情况下,gcloud app deploy运行npm start或查找server.js文件。这就是为什么从项目文件夹部署会在开发模式下运行应用程序。您是建议仍然部署整个repo,还是建议仅部署build文件夹,如果是这样,那么在设置server.js文件和package.config时缺少一个步骤。您是否能够复制您的指令?@Dmitriarionov您可能是对的,我只查看了app.yaml的含义(我是python运行时用户,不太熟悉node.js的其他细节)。