我正在尝试将SPA部署到GAE。我正在遵循他们静态网站示例中给出的配置示例。我的项目文件夹结构如下:
D:ProjectsProj1
|-node_modules
|-src
|-www
|-.babelrc
|-.gitignore
|-app.yaml
|-package.json
|-package-lock.json
我的app.yaml如下:
runtime: php55
service: frontend
api_version: 1
threadsafe: true
handlers:
- url: /
static_files: www/index.html
upload: www/index.html
- url: /(.*)
static_files: www/1
upload: www/(.*)
项目输出构建到www
文件夹中。gcloud
用于使用批处理文件中的gcloud app deploy app.yaml --quiet --version %DOC_VERSION% --project %GCP_PROJECT_ID%
命令进行部署。
我本以为gcloud
会复制和部署只在www
文件夹下的文件,但它却开始复制node_modules
文件夹下的大约10K个文件(我终止了这个过程(。
所以,我更改了app.yaml
,现在它看起来像这样:
runtime: php55
service: frontend
api_version: 1
threadsafe: true
skip_files:
- ^node_modules$
- ^src$
- ^assets$
- ^.
handlers:
- url: /
static_files: www/index.html
upload: www/index.html
- url: /(.*)
static_files: www/1
upload: www/(.*)
并按预期工作。
我的理解是static_files
设置由gcloud
工具用于上传相关文件。那么,它为什么要从未提及的文件夹上传文件呢?提及skip_files
是正确处理这种行为的唯一方法吗?
app.yaml文件中的static_files
设置仅将目录指定为静态文件的位置,以便平台在运行时根据需要定位它们。
要指定在部署期间应该或不应该上载哪些目录和文件,在app.yaml中定义skip_files
是一个选项。另一种选择是在项目的根目录(app.yaml所在的位置(创建一个.gcloudignore
文件,在该文件中指定应而不是上传到谷歌云平台的文件。它遵循与.gitignore
相同的语法。你可以在Github的示例代码中找到一个例子。请注意,您可以使用skip_files
或.gcloudignore
来避免冲突。