Как использовать крюк «перед развертыванием» для каждого проекта на базе Firebase, на которой размещаются несколько проектов и нескольких сайтов?

# #firebase #deployment #hook #firebase-hosting

Вопрос:

Я хотел бы использовать другой predeploy хук для каждого проекта на базе Firebase, где размещаются несколько проектов и несколько сайтов.

Возможно ли это?


В настоящий момент:

.firebaserc

 {
  "projects": {
    "staging": "project-name-staging",
    "production": "project-name-production"
  },
  "targets": {
    "project-name-staging": {
      "hosting": {
        "admin": [
          "project-name-staging-admin"
        ],
        "public": [
          "project-name-staging-public"
        ]
      }
    },
    "project-name-production": {
      "hosting": {
        "admin": [
          "project-name-production-admin"
        ],
        "public": [
          "project-name-production-public"
        ]
      }
    }
  }
}
 

firebase.json

 {
  "hosting": [
    {
      "predeploy": "yarn workspace admin run build",
      "target": "admin",
      "public": "admin/dist/spa",
      "rewrites": [{
        "source": "**",
        "destination": "/index.html"
      }]
    },
    {
      "predeploy": "yarn workspace public run build",
      "target": "public",
      "public": "public/dist/spa",
      "rewrites": [{
        "source": "**",
        "destination": "/index.html"
      }]
    }
  ]
}
 

пакет.json

 {
  "private": true,
  "name": "admin (or public)",
  "version": "0.0.1",
  "description": "Project Name Admin (or Public)",
  "productName": "Project Name Admin (or Public)",
  "scripts": {
    "dev": "quasar dev",
    "build": "quasar build"
  },
  "dependencies": {
    "@quasar/extras": "1.10.6",
    "axios": "0.21.1",
    "core-js": "3.13.1",
    "firebase": "8.6.5",
    "quasar": "1.15.19",
    "vue-i18n": "8.24.4"
  },
  "devDependencies": {
    "@quasar/app": "2.2.8",
    "babel-eslint": "10.1.0",
    "dotenv": "10.0.0",
    "eslint": "7.28.0",
    "eslint-config-standard": "16.0.3",
    "eslint-plugin-import": "2.23.4",
    "eslint-plugin-node": "11.1.0",
    "eslint-plugin-promise": "5.1.0",
    "eslint-plugin-vue": "7.10.0",
    "eslint-webpack-plugin": "2.5.4"
  }
}
 

Ideally:

.firebaserc

 {
  "projects": {
    "staging": "project-name-staging",
    "production": "project-name-production"
  },
  "targets": {
    "project-name-staging": {
      "hosting": {
        "admin": [
          "project-name-staging-admin"
        ],
        "public": [
          "project-name-staging-public"
        ]
      }
    },
    "project-name-production": {
      "hosting": {
        "admin": [
          "project-name-production-admin"
        ],
        "public": [
          "project-name-production-public"
        ]
      }
    }
  }
}
 

firebase.json

 {
  "hosting": [
    {
      "predeploy": {
        "staging": "yarn workspace admin run staging:build",
        "production": "yarn workspace admin run production:build"
      },
      "target": "admin",
      "public": "admin/dist/spa",
      "rewrites": [{
        "source": "**",
        "destination": "/index.html"
      }]
    },
    {
      "predeploy": {
        "staging": "yarn workspace public run staging:build",
        "production": "yarn workspace public run production:build"
      },
      "target": "public",
      "public": "public/dist/spa",
      "rewrites": [{
        "source": "**",
        "destination": "/index.html"
      }]
    }
  ]
}
 

пакет.json

 {
  "private": true,
  "name": "admin (or public)",
  "version": "0.0.1",
  "description": "Project Name Admin (or Public)",
  "productName": "Project Name Admin (or Public)",
  "scripts": {
    "dev": "cross-env NODE_ENV=staging quasar dev",
    "staging:build": "cross-env NODE_ENV=staging quasar build",
    "production:build": "cross-env NODE_ENV=production quasar build"
  },
  "dependencies": {
    "@quasar/extras": "1.10.6",
    "axios": "0.21.1",
    "core-js": "3.13.1",
    "firebase": "8.6.5",
    "quasar": "1.15.19",
    "vue-i18n": "8.24.4"
  },
  "devDependencies": {
    "@quasar/app": "2.2.8",
    "babel-eslint": "10.1.0",
    "cross-env": "7.0.3",
    "dotenv": "10.0.0",
    "eslint": "7.28.0",
    "eslint-config-standard": "16.0.3",
    "eslint-plugin-import": "2.23.4",
    "eslint-plugin-node": "11.1.0",
    "eslint-plugin-promise": "5.1.0",
    "eslint-plugin-vue": "7.10.0",
    "eslint-webpack-plugin": "2.5.4"
  }
}
 

И, наконец, выполните следующие действия, чтобы выполнить развертывание хостинга Firebase и их predeploy крючки:

  • firebase deploy -P staging --only hosting:admin
  • firebase deploy -P production --only hosting:admin
  • и т.д.

Ответ №1:

Вы можете настроить сценарий развертывания внутри package.json, который запускает соответствующую команду, поскольку невозможно создать инструменты firebase-cli для каждой платформы и пользовательской интеграции, вы хотите ввести команду развертывания в конце ваших собственных сценариев сборки

"cross-env NODE_ENV=staging quasar build amp;amp; firebase deploy --only hosting:admin"

Кроме того, у вас также есть встроенная функция «использовать», но это больше для управления несколькими проектами с одним и тем же сайтом https://firebase.google.com/docs/cli#project_aliases

Я также предлагаю прочитать несколько приложений для каждого сценария проекта, показанных здесь: https://firebase.google.com/docs/projects/learn-more#best-practices

Комментарии:

1. Большое спасибо за эти объяснения 🙂