Reactjs App Engine App.yaml处理程序,用于内置React应用程序
我正在尝试将React应用程序(使用创建React应用程序创建)的生产构建部署到gcloud应用程序引擎灵活环境中 运行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
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
目录成为应用程序/服务的顶级目录,那么您需要:
- 在
dir中创建一个build
文件(手动或指示您的构建过程这样做) 注意:您需要调整该文件中的路径,因为应用程序目录中不再有app.yaml
目录。或者尝试在其内部创建一个build
symlink到自身,可能允许在不调整路径的情况下使用现有的build->.
内容(但不是100%确定这会起作用)app.yaml
- 部署
文件,而不是顶部(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的其他细节)。