将Gatsby网站部署到Firebase CDN时,Gatsby Cloud似乎没有使用firebase.json文件

时间:2020-03-19 18:25:01

标签: firebase gatsby

我在Firebase上托管的Gatsby网站的部署过程有些复杂,因此我使用Gatsby Cloud来构建该网站并将其部署到Firebase。我有一组缓存控制规则,我希望网站在部署到Firebase时使用,这些规则可在firebase.json文件中找到(如下所示)。当我从本地计算机部署站点时,它运行良好,但是当Gatsby Cloud构建并部署到firebase时,似乎忽略了firebase.json文件,转而使用了我看不见的其他配置,因此缓存控制规则被忽略。知道如何让Gatsby Cloud兑现firebase.json文件吗?

{
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint"
    ]
  },
  "hosting": {
    "public": "public",
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
    "headers": [
      {
        "source": "**/*",
        "headers": [
          {
            "key": "cache-control",
            "value": "cache-control: public, max-age=0, must-revalidate"
          }
        ]
      },
      {
        "source": "static/**",
        "headers": [
          {
            "key": "cache-control",
            "value": "public, max-age=31536000, immutable"
          }
        ]
      },
      {
        "source": "**/*.@(css|js)",
        "headers": [
          {
            "key": "cache-control",
            "value": "public, max-age=31536000, immutable"
          }
        ]
      },
      {
        "source": "sw.js",
        "headers": [
          {
            "key": "cache-control",
            "value": "cache-control: public, max-age=0, must-revalidate"
          }
        ]
      },
      {
        "source": "page-data/**",
        "headers": [
          {
            "key": "cache-control",
            "value": "cache-control: public, max-age=0, must-revalidate"
          }
        ]
      }
    ]
  },
  "storage": {
    "rules": "storage.rules"
  },
  "emulators": {
    "functions": {
      "port": 5001
    }
  }
}

1 个答案:

答案 0 :(得分:1)

我有同样的问题。您需要将firebase.json文件复制到public /文件夹中。快速的技巧是只复制它,更好的方法是使用onPostBuild钩子

类似这样的东西:

exports.onPostBuild = () => {
  fs.copySync(
    path.join(__dirname, '/firebase.json'),
    path.join(__dirname, '/public/firebase.json')
  )
}