Firebase-tools: Terima file JSON untuk fungsi: config: set

Dibuat pada 20 Jul 2017  ·  37Komentar  ·  Sumber: firebase/firebase-tools

Saat ini, dimungkinkan untuk mendapatkan konfigurasi seluruh fungsi sebagai file JSON menggunakan firebase functions:config:get , tetapi kita harus secara manual memasukkan setiap variabel saat menggunakan perintah firebase functions:config:set , yang membuatnya praktis tidak dapat digunakan saat mengerjakan lingkungan yang berbeda.

Idealnya, kita harus dapat melakukan:

firebase functions:config:get > config.json
firebase functions:config:set -f config.json

Komentar yang paling membantu

Terima kasih telah berbagi! @laurenzlong
Saya ingin mengimpor dari file, jadi saya menggunakan perintah seperti ini.

firebase functions:config:set service_account="$(cat service-account.json)"

Saya mengimpor file json akun layanan ke Firebase Cloud Functions, karena saya ingin menggunakan API manajemen pengguna dari Firebase Admin SDK.

Semua 37 komentar

Saya setuju dengan @jpreynat , kami takut pada hari kami lupa mengatur config var sebelum menerapkan ke produksi kami. Mengikat config:set ke skrip penerapan kustom kami dengan config.json akan menjadi fitur yang bagus untuk ditambahkan.
Apakah ada solusi saat ini, mungkin pemipaan dalam konfigurasi?

Sepertinya Anda mencoba mereplikasi konfigurasi di seluruh proyek. Apakah firebase functions:config:clone bekerja untuk Anda?

Untuk memberikan beberapa konteks, kami sengaja menjauh dari konfigurasi berbasis file karena kami pikir itu mendorong praktik buruk (yaitu, menyimpan file penuh rahasia yang disimpan dengan kode Anda, bahkan berpotensi diperiksa ke repositori sumber Anda).

Apa pendapat Anda tentang beberapa cara (mekanika TBD) untuk mendeklarasikan variabel konfigurasi "wajib" -- dan jika Anda mencoba menerapkan tanpa konfigurasi yang diperlukan dalam proyek saat ini, itu akan error sebelum ada yang diubah. Apakah itu akan menyelesaikan masalah utama Anda? Jika tidak, mengapa memiliki file sangat berguna bagi Anda?

@mbleigh Itulah yang saya tidak tahu saya inginkan. Ide bagus!
Mungkin diberikan/apa yang Anda maksud dengan 'Mekanika TBD', tetapi: Mendefinisikan struktur kunci/konfigurasi dalam beberapa file dalam proyek kami daripada dari jarak jauh, sehingga melewati proses peninjauan git/PR seperti yang lainnya.
@jpreynat Maaf untuk masalah pembajakan

@laurenzlong Terima kasih atas sarannya, tetapi kami tidak mencoba menduplikasi konfigurasi.
Perhatian utama kami adalah memperbarui konfigurasi proyek yang berbeda tergantung pada tahap penerapan kami.
Jadi pada dasarnya, kami memiliki file konfigurasi per lingkungan (dev, staging dan prod), dan mengatur konfigurasi Firebase masing-masing (untuk PR, push on master dan tag).

@mbleigh Terima kasih atas informasinya.
Namun, kami tidak begitu yakin bagaimana kami dapat menyimpan semua env ini dengan cara lain selain menggunakan file konfigurasi.
Mereka saat ini diformat sebagai JSON untuk kemudahan membaca, tetapi kami berpikir untuk memformatnya sebagai pasangan kunci/nilai untuk meneruskannya langsung ke perintah functions:config:set .
Saya setuju dengan Anda bahwa ini tidak lebih aman daripada melewatkan file JSON.
Apakah Anda memiliki rekomendasi tentang bagaimana kami dapat menyimpan variabel lingkungan kami untuk tahapan yang berbeda selain menggunakan file?

@ahaverty Jangan khawatir, saya senang ini bisa diperdebatkan di sini.

@jpreynat ketika Anda menjalankan functions:config:set disimpan dengan proyek saat ini. Jika Anda menggunakan firebase use untuk beralih antar proyek, konfigurasi Anda akan tetap ada. Jadi Anda dapat menjalankan set sekali per proyek dan kemudian akan selalu ada. Ini harus menyelesaikan masalah "konfigurasi berbeda untuk lingkungan berbeda", jadi mungkin saya tidak memahami masalah sebenarnya?

@jpreynat Saya akan menutup masalah ini untuk saat ini, tetapi tolong buka kembali jika Michael dan saya salah memahami permintaan Anda.

@laurenzlong @mbleigh Maaf saya tidak menjawab dengan cepat di utas ini.
Kami menemukan solusi untuk masalah ini untuk saat ini, tetapi berikut adalah beberapa konteks untuk memperjelas permintaan saya:

Kami menggunakan aplikasi kami menggunakan Travis (perhatikan bahwa ini akan bagus dengan CI apa pun atau bahkan secara lokal). Karena kami menerapkan aplikasi kami ke tahapan yang berbeda tergantung pada cabang dan tag, akan sangat bagus jika dapat menggunakan file JSON yang berbeda berdasarkan lingkungan.
Misalnya, ini akan memungkinkan untuk melakukan firebase config:set -f staging.json atau firebase config:set -f prod.json tergantung pada kondisi ini.
Solusi kami adalah menggunakan firebase sebagai modul node, tetapi kami masih harus menyelaraskan konfigurasi JSON kami, yang rentan terhadap kesalahan.

Hai @jpreynat saya masih agak bingung dengan jawaban Anda. Setelah Anda menyetel konfigurasi sekali, konfigurasi akan tetap ada, bahkan di seluruh penerapan, kecuali jika Anda secara eksplisit menghapus nilai konfigurasi dengan menjalankan fungsi firebase

Adakah yang bisa membuka kembali ini? %) @jpreynat @mbleigh Itu benar-benar salah satu hal yang hilang. Atm saya memiliki hampir 15 variabel konfigurasi (dan lebih banyak lagi yang akan datang) dan itu akan sangat berguna jika functions:config:set dapat menerima JSON dalam beberapa cara.

Suara besar dari kami untuk saran
Menjadi titik sakit bagi kami juga, tetapi itu akan menyelesaikan semua masalah kami dan akan cocok dengan proses kontrol/peninjauan versi 👍

https://medium.com/@AllanHasegawa/setting -config-for-firebase-cloud-functions-with-json-136f455e7c69

Hai @yaronyosef Anda bisa langsung mensuplai JSON ke perintah firebase functions:config :set, hanya saja Anda harus memformatnya dengan cara yang sesuai untuk platform Anda. Untuk Linux, yang berikut ini harus berfungsi:

firebase functions:config:set foo='{"bar":"something","faz":"other"}'

Terima kasih telah berbagi! @laurenzlong
Saya ingin mengimpor dari file, jadi saya menggunakan perintah seperti ini.

firebase functions:config:set service_account="$(cat service-account.json)"

Saya mengimpor file json akun layanan ke Firebase Cloud Functions, karena saya ingin menggunakan API manajemen pengguna dari Firebase Admin SDK.

Kasus penggunaan yang keren! Terima kasih telah berbagi!

Kami juga lebih suka melacak konfigurasi non-rahasia melalui Git, di mana file konfigurasi runtime JSON yang dikomit (untuk beberapa lingkungan) akan menjadi otoritatif dan lingkungan CI kemudian akan menerapkan functions:config:set dari file yang sesuai dengan lingkungan tertentu (dan setiap lingkungan sesuai dengan proyek Firebase yang terpisah).

Jika Anda menyimpan konfigurasi di git, sangat mudah untuk membacanya ke dalam runtime fungsi Anda. Letakkan saja di configs/<project_id>.json dan kemudian:

let config = {};
try {
  config = require(`./configs/${process.env.GCLOUD_PROJECT}.json`);
} catch (e) {
  console.log('No config found for project', process.env.GCLOUD_PROJECT);
}

Konfigurasi runtime yang digunakan oleh Firebase secara khusus dirancang untuk menghindari config diperiksa ke git, karena (terutama dengan rahasia) kami menemukan itu sebagai pola yang menyebabkan lebih banyak masalah daripada yang dipecahkan.

Itu benar, meskipun kemudian kami tidak lagi menggunakan Config API untuk tujuan ini sama sekali. Mungkin bermanfaat untuk tetap melalui Config API untuk menyimpan nilai sensitif (yang tampaknya merupakan kasus penggunaan yang sesuai, berdasarkan dokumen Firebase) dan memuat nilai yang dikontrol sumber dan tidak terlacak dengan cara yang sama persis (yaitu melalui config() disediakan oleh firebase-functions ).

Untuk saat ini, saya menggunakan one-liner berikut untuk memberi makan seluruh .runtimeconfig ke functions:config:set :

firebase functions:config:set $(jq -r 'to_entries[] | [.key, (.value | tojson)] | join("=")' < .runtimeconfig/${FIREBASE_ENV}.json)

di mana FIREBASE_ENV adalah nama lingkungan yang digunakan dalam penerapan (misalnya dev ). Akan menyenangkan untuk dapat mempersingkat ini lebih lanjut, misalnya

firebase functions:config:set -f .runtimeconfig/${FIREBASE_ENV}.json

Namun pada akhirnya, bahkan itu mungkin tidak diperlukan jika Config API mengaktifkan jejak audit yang mudah digunakan dari semua perubahan (mohon perbaiki saya jika memang demikian, saya ingin menjelajahinya).

Jadi bagaimana ini datang? 😄

Akan senang melihat saran @mbleigh tetap diterapkan! Kami terus-menerus mengalami masalah lupa menyetel konfigurasi pada target non-dev kami

Terima kasih atas utasnya. Belum ada yang perlu dilaporkan, tapi saya akan membicarakan ini lagi dalam rapat perencanaan kita untuk melihat apakah kita bisa mulai membuat kemajuan.

Saya memvalidasi konfigurasi saya dengan file skema JSON untuk memastikannya memiliki semua nilai yang saya harapkan. Validasi ini adalah bagian dari pipeline CI saya dan mencegah penerapan jika gagal. Jika seperti saya, Anda menggunakan TypeScript untuk menulis fungsi Anda, Anda dapat membuat skema JSON dari tipe Anda.

Ini berfungsi dengan baik, dengan batasan bahwa konfigurasi fungsi hanya menerima string, sehingga skema tidak dapat memvalidasi bahwa nilai konfigurasi adalah angka. Untuk boolean tidak apa-apa karena saya dapat menggunakan enum dengan "true" dan "false" sebagai satu-satunya nilai yang valid.

Lihat konfigurasi CircleCI saya dan posting blog ini untuk referensi.

@hgwood terima kasih telah berbagi! Kami pasti akan menambahkan ini ke CI kami juga.

Hanya ingin meninggalkan solusi saya untuk "masalah" ini, dan pemikiran saya tentang diskusi:

  1. Saya mengerti bahwa nilai rahasia/sensitif TIDAK boleh disimpan dalam repo. Solusi saya hanya untuk nilai non-rahasia. Nilai rahasia diatur secara manual, tetapi cara untuk menandai nilai konfigurasi seperti yang diperlukan akan sangat bagus untuk nilai rahasia tersebut.
  2. Saya pikir ini lebih penting daripada yang tampaknya dipikirkan beberapa orang. PITA harus secara manual menetapkan nilai konfigurasi individual untuk proyek lingkungan penerapan yang berbeda, dan tidak dapat melihat/membandingkannya secara bersamaan dengan mudah. Mendefinisikan konfigurasi dalam file membuat proses BANYAK tidak terlalu merepotkan.
  3. Saya pikir menambahkan editor konfigurasi fungsi ke konsol web akan sangat meningkatkan ini, tetapi akan sangat bagus jika ada cara untuk secara bersamaan melihat konfigurasi untuk beberapa proyek, sehingga Anda dapat dengan mudah membandingkan konfigurasi untuk lingkungan penerapan yang berbeda.
  4. Saya telah mengatakan selamanya bahwa firebase perlu mengizinkan lingkungan untuk didefinisikan dalam satu proyek, jadi Anda tidak perlu beberapa proyek untuk digunakan sebagai lingkungan penerapan. Jika ini ada, akan sangat mudah untuk secara bersamaan melihat konfigurasi untuk beberapa lingkungan dalam satu proyek.
  5. Solusi saya mungkin memiliki masalah, jangan percayai kode saya kata demi kata, tetapi saya suka konsep umumnya.

solusi saya

Saya menggunakan file konfigurasi cascading yaml, yang berguna untuk nilai default dan nilai yang berlaku untuk semua konfigurasi terlepas dari lingkungan penerapan.

./config/default.yml

app:
  name: My App
featureFlags:
  someFeature:
    enabled: false

./config/dev.yml (file konfigurasi serupa untuk lingkungan penerapan lainnya)

imports:
  - {resource: default.yml}
app:
  environmentName: Development
services:
  someOtherService:
    baseUrl: https://dev.someotherservice.com/api
featureFlags:
  someFeature:
    enabled: true

Kemudian, saya telah menulis skrip simpul kecil yang memuat konfigurasi yang diselesaikan, dan mengembalikan daftar pasangan kunci=val yang dibatasi spasi

yaml_to_keyval.ts

import * as configYaml from "config-yaml"
import * as flat from "flat"


const yamlFile = process.argv[2]
const config = configYaml(yamlFile)
const flatConfig = flat(config)

const key_val_list = Object.keys(flatConfig).map(function(key){
    return `${key}=${flatConfig[key]}`
})

console.log(key_val_list.join(' '))

Selama penerapan CI, saya menggunakan skrip bash shell ini untuk mendapatkan pasangan key=val dan mengaturnya dengan functions:config :set

# env is set to the desired deployment environment (eg "dev"), which is passed as an argument to the CI script command
config_in="$(readlink -f ./config/$env.yml)"
key_vals="$(ts-node ./scripts/node/yaml_to_keyval.ts $config_in)"
firebase functions:config:set $key_vals

@kanemotos Saya suka solusi cat , tetapi apakah Anda tidak menemukan kesalahan Precondition check failed saat mencoba mengunggah file sertifikat Anda?

Kami akhirnya menggunakan Deployment Manager karena alasan ini.

Kami mengatur semua konfigurasi melalui "config Yaml" untuk DM. Kemudian DM membuat Konfigurasi dan Variabel Runtime yang sesuai, dan firebase deploy mengambil dan menetapkan nilainya pada waktu penerapan tanpa harus menggunakan firebase config:set sama sekali. Ini juga memungkinkan kita untuk mengatur sumber daya lain (misalnya ember dan kontrol aksesnya) dan mengatur nilainya di RC tanpa harus memasoknya secara eksternal ke template. Selain itu, ini memungkinkan kita untuk menggunakan konfigurasi camelCase dan nama variabel.

Satu-satunya waktu kami menetapkan nilai secara eksternal adalah ketika kami harus meneruskan kunci akun layanan (terenkripsi) melalui konfigurasi runtime, karena DM tidak dapat mengenkripsi nilai dengan aman. Tapi kami masih menggunakan gcloud beta runtime-config configs variables set untuk itu (setelah penyebaran DM dan sebelum firebase deploy ) dan bukan firebase config:set , karena yang pertama menerima stdout dari KMS.

Saya hanya ingin menambahkan - membaca ini tampaknya beberapa orang melewatkan poin penting yang menyebabkan kebingungan. Akan sangat berguna jika ini dijelaskan dalam dokumentasi juga.

Pada dasarnya, functions.config() tetap ada di antara _deployments_, tetapi JUGA dapat diatur secara terpisah di antara berbagai proyek firebase!

Ini berarti bahwa untuk lingkungan dev, staging, dan prod, Anda harus menyiapkan beberapa proyek firebase identik (daripada menggunakan hosting multi-situs, atau menerapkan ke proyek SAMA... ) yang masing-masing secara terus-menerus menyimpan variabel lingkungan mereka sendiri - berbeda - .

Setelah Anda menetapkan alias (atau hanya beralih antar proyek dengan firebase use ), Anda dapat menerapkan repo yang sama ke beberapa proyek firebase terpisah. Ini adalah cara Anda menyiapkan lingkungan dev, staging, dan produksi - sebagai proyek firebase terpisah.

Kemudian, Anda dapat mengatur konfigurasi lingkungan terpisah untuk masing-masing, seperti ini:
firebase -P dev config:set - atur variabel untuk lingkungan pengembangan Anda
firebase -P prod config:set - atur variabel untuk lingkungan produksi Anda...

Kemudian, Anda dapat menggunakan repo yang sama dua kali, seperti:
firebase deploy -P dev
firebase deploy -P prod
dan keduanya akan menerapkan, ke proyek firebase masing-masing, dan akan berisi konfigurasi lingkungan mereka sendiri yang terpisah yang akan tetap ada di antara penerapan.

Ya, kami juga melakukannya. Pisahkan proyek untuk dev/test/prod.

Hanya membagikan solusi Vanilla JS saya yang berfungsi terkait platform mana yang Anda kembangkan (Windows, MacOS, Linux):

Menggunakan proyek terpisah untuk dev/test/prod.

/.firebaserc

{
  "projects": {
    "dev": "my-project-name-dev",
    "test": "my-project-name-test",
    "prod": "my-project-name-prod"
  }
}

File konfigurasi

File JSON di folder /functions/config :

/functions/config/config.dev.json 
/functions/config/config.test.json 
/functions/config/config.prod.json 
/functions/config/config.SAMPLE.json <-- only file tracked in git

Example content:
{
    "google": {
        "key": "my-api-key",
        "storage_bucket": "firebase-storage-bucket"
    },
    "another_vendor": {
        "my_prop": "my value"
    },
    ...
}

/fungsi/set-config.js

const fs = require('fs');
const env = process.argv[2];

const configPath = `./config/config.${env}.json`;

if (!(configPath && fs.existsSync(configPath))) {
    return;
}

const collectConfigLines = (o, propPath, configLines) => {
    propPath = propPath || '';
    configLines = configLines || [];
    for (const key of Object.keys(o)) {
        const newPropPath = propPath + key;
        if (typeof o[key] === 'object') {
            collectConfigLines(o[key], newPropPath + '.', configLines);
        } else if (o[key] != null && o[key] !== '') {
            configLines.push(`${newPropPath}=${JSON.stringify(o[key])}`);
        }
    }
}

const config = require(configPath);
const configLines = [];
collectConfigLines(config, '', configLines);

const cp = require('child_process');
cp.execSync(`firebase -P ${env} functions:config:set ${configLines.join(' ')}`);

/fungsi/paket.json

...
"scripts": {
    "config:set:dev": "node set-config dev",
    "config:set:test": "node set-config test",
    "config:set:prod": "node set-config prod",
    ...
},
...

Jika ada yang masih mencari, ada metode yang digunakan dalam artikel media ini https://medium.com/indielayer/deploying-environment-variables-with-firebase-cloud-functions-680779413484. Menyelamatkan hidupku.

Apa yang saya lewatkan secara pribadi adalah kemampuan untuk mengatur variabel konfigurasi tanpa melakukan penerapan. Kami memiliki saluran CICD yang melakukan penyebaran ke lingkungan kami yang berbeda dan kami tidak ingin pengembang membangun kode secara lokal dan menyebarkannya, terutama untuk produksi. Begitulah cara memecahkannya.

Juga jika kita ingin mengubah variabel yang ada nanti, dengan beberapa fitur yang sedang dikembangkan, sekarang Anda telah checkout tag yang dirilis terakhir, membangunnya, menyebarkan, checkout kembali ke cabang fitur Anda, lanjutkan. Itu benar-benar membuat ini tidak dapat digunakan.

Pada dasarnya kami ingin konfigurasi jarak jauh untuk fungsi cloud

@bezysoftware Saya pikir Anda perlu menggunakan variabel lingkungan (bukan konfigurasi lingkungan), Anda dapat melewati lapisan firebase dan melakukannya di platform cloud google, periksa https://cloud.google.com/functions/docs/env- var

Terima kasih telah berbagi! @laurenzlong
Saya ingin mengimpor dari file, jadi saya menggunakan perintah seperti ini.

firebase functions:config:set service_account="$(cat service-account.json)"

Saya mengimpor file json akun layanan ke Firebase Cloud Functions, karena saya ingin menggunakan API manajemen pengguna dari Firebase Admin SDK.

Itu tidak berhasil

@Md-Abdul-Halim-Rafi

fungsi firebase

Bekerja untuk saya, saya dapat melihat config var dengan firebase functions:config:get .
Itu tidak berfungsi pertama kali karena saya tidak berada di folder proyek dan tidak memilih proyek firebase untuk mengatur variabel konfigurasi, untuk memilih proyek firebase gunakan firebase use --add , CLI akan meminta Anda dengan daftar proyek di konsol firebase Anda (dengan asumsi Anda masuk ke CLI dengan firebase login )

@dnhyde

fungsi firebase

Tampaknya ini tidak akan berfungsi saat menggunakan dalam file json Anda jenis nilai lain apa pun kecuali string (mis. boolean atau angka):

{
   "test": {
        "hmm": true
    }
}

gagal dengan:

Error: HTTP Error: 400, Invalid value at 'variable.text' (TYPE_STRING), true

Tampaknya masuk akal bagi saya bahwa saya harus dapat melakukan:

firebase functions:config:get > config.json

dan kemudian:

firebase functions:config:set < config.json

Masuk akal jika kedua perintah ini saling melengkapi.

Memiliki konfigurasi dalam file memungkinkan saya untuk mengontrol versi dan melihat bagaimana itu berubah dari waktu ke waktu.

Sangat disayangkan bahwa satu-satunya cara kita harus mencapai ini sekarang (menggunakan env=$(cat config.json) ) juga mengakibatkan kemampuan saya untuk membuat config.json menjadi nilai aktual karena saya tidak dapat membungkusnya dalam { env: ... } .

Catatan untuk saya sendiri: di sinilah saya harus memulai untuk permintaan tarik fitur: https://github.com/firebase/firebase-tools/blob/b17611a4ff0d36e157ed06a24f6c81d4e146d9e2/src/functionsConfig.js#L142

Hanya membagikan solusi Vanilla JS saya yang berfungsi terkait platform mana yang Anda kembangkan (Windows, MacOS, Linux):

Menggunakan proyek terpisah untuk dev/test/prod.

/.firebaserc

{
  "projects": {
    "dev": "my-project-name-dev",
    "test": "my-project-name-test",
    "prod": "my-project-name-prod"
  }
}

File konfigurasi

File JSON di folder /functions/config :

/functions/config/config.dev.json 
/functions/config/config.test.json 
/functions/config/config.prod.json 
/functions/config/config.SAMPLE.json <-- only file tracked in git

Example content:
{
    "google": {
        "key": "my-api-key",
        "storage_bucket": "firebase-storage-bucket"
    },
    "another_vendor": {
        "my_prop": "my value"
    },
    ...
}

/fungsi/set-config.js

const fs = require('fs');
const env = process.argv[2];

const configPath = `./config/config.${env}.json`;

if (!(configPath && fs.existsSync(configPath))) {
    return;
}

const collectConfigLines = (o, propPath, configLines) => {
    propPath = propPath || '';
    configLines = configLines || [];
    for (const key of Object.keys(o)) {
        const newPropPath = propPath + key;
        if (typeof o[key] === 'object') {
            collectConfigLines(o[key], newPropPath + '.', configLines);
        } else if (o[key] != null && o[key] !== '') {
            configLines.push(`${newPropPath}=${JSON.stringify(o[key])}`);
        }
    }
}

const config = require(configPath);
const configLines = [];
collectConfigLines(config, '', configLines);

const cp = require('child_process');
cp.execSync(`firebase -P ${env} functions:config:set ${configLines.join(' ')}`);

/fungsi/paket.json

...
"scripts": {
    "config:set:dev": "node set-config dev",
    "config:set:test": "node set-config test",
    "config:set:prod": "node set-config prod",
    ...
},
...

Hanya membagikan solusi Vanilla JS saya yang berfungsi terkait platform mana yang Anda kembangkan (Windows, MacOS, Linux):

Menggunakan proyek terpisah untuk dev/test/prod.

/.firebaserc

{
  "projects": {
    "dev": "my-project-name-dev",
    "test": "my-project-name-test",
    "prod": "my-project-name-prod"
  }
}

File konfigurasi

File JSON di folder /functions/config :

/functions/config/config.dev.json 
/functions/config/config.test.json 
/functions/config/config.prod.json 
/functions/config/config.SAMPLE.json <-- only file tracked in git

Example content:
{
    "google": {
        "key": "my-api-key",
        "storage_bucket": "firebase-storage-bucket"
    },
    "another_vendor": {
        "my_prop": "my value"
    },
    ...
}

/fungsi/set-config.js

const fs = require('fs');
const env = process.argv[2];

const configPath = `./config/config.${env}.json`;

if (!(configPath && fs.existsSync(configPath))) {
    return;
}

const collectConfigLines = (o, propPath, configLines) => {
    propPath = propPath || '';
    configLines = configLines || [];
    for (const key of Object.keys(o)) {
        const newPropPath = propPath + key;
        if (typeof o[key] === 'object') {
            collectConfigLines(o[key], newPropPath + '.', configLines);
        } else if (o[key] != null && o[key] !== '') {
            configLines.push(`${newPropPath}=${JSON.stringify(o[key])}`);
        }
    }
}

const config = require(configPath);
const configLines = [];
collectConfigLines(config, '', configLines);

const cp = require('child_process');
cp.execSync(`firebase -P ${env} functions:config:set ${configLines.join(' ')}`);

/fungsi/paket.json

...
"scripts": {
    "config:set:dev": "node set-config dev",
    "config:set:test": "node set-config test",
    "config:set:prod": "node set-config prod",
    ...
},
...

Maaf tapi kapan Anda menjalankan skrip " config:set :dev" ? Saya tidak mengerti ... terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat