Firebase 部署,忽略所有文件,但 public 文件夹

Firebase deploy, ignore all files but public folder

我正在尝试清理我的 Firebase 部署过程,并且在将文件部署到主机时需要忽略除我的 /dist aka public 文件夹之外的所有文件。我相信它可以通过 firebase.json 中的 ignore 设置来完成,但我不知道除了手动指定所有文件之外如何实现它。

示例.json:

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "dist",
    "ignore": [
      // ignore all other files besides dist folder here
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

使用 glob **ignore any file or folder in an arbitrary sub-directory

然后您可以使用 !dist

取消忽略您的 dist 文件夹

所以你的 firebase.json 文件看起来像:

{
    "database": {
        "rules": "database.rules.json"
        },
        "hosting": {
            "public": "dist",
            "ignore": [
                "**",
                "!dist/**"
            ],
            "rewrites": [{
                "source": "**",
                "destination": "/index.html"
            }
        ]
    }
}

对于较新版本的 Firebase:

新版本的 firebase 似乎不允许使用上述方法,因此只需定义应忽略的文件夹即可:

{
    "database": {
        "rules": "database.rules.json"
        },
        "hosting": {
            "public": "dist",
            "ignore": [
                "**/node_modules/**",
                "**/src/**",
                "**/public/**"
            ],
            "rewrites": [{
                "source": "**",
                "destination": "/index.html"
            }
        ]
    }
}

您可以使用 Firebase 控制台检查已部署的文件数量:

  1. 打开您的 Firebase 项目的托管页面并记下文件数。
  2. 运行 命令 $ tree dist/(因为在本例中 dist/ 是我们在 Firebase 托管上提供的文件夹)并记下构建文件夹中的文件数。

这些文件的数量应该大致相同。

ignore 属性指定在部署时要忽略的文件。它可以采用 glob 模式,与 Git 处理 .gitignore.

的方式相同

以下是要忽略的文件的默认值:

"hosting": {
  // ...

  "ignore": [
    "firebase.json",  // the Firebase configuration file (this file)
    "**/.*",  // files with a leading period should be hidden from the system
    "**/node_modules/**",  // contains dependencies used to create your site but not run it

    "**/someOtherFolder/**"  // this is will exclude the folder with the name entered
    "**someOtherFile**" // this will exclude that particular file
  ]
}

!(pattern) 匹配与提供的任何模式不匹配的任何内容。

* 只匹配 public 目录根目录下的文件和文件夹

{
  "hosting": {
    "public": "dist",
    "ignore": ["**, !*"],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}