Tidak dapat membaca Firestore DB daripada pakej npm tersuai menggunakan objek Firestore yang diluluskan daripada aplikasi
P粉064448449
P粉064448449 2023-09-10 19:49:11
0
1
525

Saya cuba menulis pakej npm saya sendiri yang menggunakan pangkalan data Firestore. Saya memulakan kelas daripada pakej menggunakan objek Firestore yang diluluskan daripada aplikasi:

import { firestoreTest } from 'my-package'

const app = initializeApp(firebaseConfig)
const db = getFirestore(app)
const test = new firestoreTest(db)

Apabila saya memanggil fungsi dari pakej await test.getDoc('pathto/doc') Saya mendapat ralat: 未捕获(承诺中)FirebaseError:预计 collection() 的第一个参数是 CollectionReference、DocumentReference 或 FirebaseFirestore

Saya mencuba kombinasi berbeza untuk memulakan objek Firestore untuk membaca daripada Firestore. Hanya apabila saya memulakan sepenuhnya apl Firebase dalam pakej menggunakan firebaseConfig saya boleh membaca data daripada Firestore, tetapi kemudian saya tidak mewarisi pengesahan daripada apl induk dan hanya boleh membaca koleksi yang boleh diakses secara umum.

Saya pun cuba menambah doc(db, documentPath) 传递给包,然后出现错误,提示我可能发生的情况:类型与预期实例不匹配。您是否传递了来自不同 Firestore SDK 的引用?

Jadi saya fikir menggunakan Firebase daripada pakej saya akan membuat tika Firebase SDK yang berasingan.

Saya menggunakan versi pakej firebase yang sama dalam apl dan pakej saya dan juga menetapkan firebase pakej sebagai kebergantungan rakan sebaya.

Saya mahu menggunakan objek Firebase yang sama dengan lancar dalam apl utama pakej saya.

Bolehkah seseorang membantu saya memahami jika ada sesuatu yang boleh saya lakukan untuk mencapai ini?

Ini adalah kod daripada pakej ujian saya.

export class firestoreTest {
  private db: Firestore
  private app: FirebaseApp
  private dbFromApp: Firestore
  private localApp: FirebaseApp
  private localDb: Firestore

  constructor(firebaseConfig: FirebaseOptions, app: FirebaseApp, db: Firestore) {
    this.db = db
    this.app = app

    this.dbFromApp = getFirestore(app)

    this.localApp = initializeApp(firebaseConfig)
    this.localDb = getFirestore(this.localApp)
  }

  public async getDoc(docPath: string, ref?: DocumentReference<DocumentData, DocumentData>) {
    /* Reads data, but without authenticated user context */
    /* Uncaught (in promise) FirebaseError: Missing or insufficient permissions. */
    // const data = await getDoc(doc(this.localDb, docPath).withConverter(converter<any>()))

    /* Uncaught (in promise) FirebaseError: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore */
    // const data = await getDoc(doc(this.dbFromApp, docPath).withConverter(converter<any>()))

    /* Uncaught (in promise) FirebaseError: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore */
    const data = await getDoc(doc(this.db, docPath).withConverter(converter<any>()))

    /* Uncaught (in promise) FirebaseError: Type does not match the expected instance. Did you pass a reference from a different Firestore SDK? */
    // const data = ref && (await getDoc(ref.withConverter(converter<any>())))

    console.log(data?.data())
  }
}

Kemas kini

Saya cuba memasang pakej daripada sumber tempatan dan menggunakan symlinks ke repositori tempatan saya, tetapi itu tidak membantu.

Kemudian saya menolak repositori pakej saya ke GitHub dan memasang pakej menggunakan repositori GitHub sebagai sumber dan kini ia berfungsi.

Nampaknya apabila menggunakan sumber tempatan, pakej saya sentiasa menggunakan tika Firebase yang berasingan. Meletakkan keseluruhan folder projek pakej ke dalam folder aplikasi saya dan menggunakan pakej separa seperti aplikasi juga tidak membantu.

Memasang daripada GitHub bukanlah penyelesaian pembangunan, jadi saya akhirnya mencipta folder dalam projek apl saya dan meletakkan semua fail pakej di dalamnya seolah-olah ia sebahagian daripada apl saya. Selepas mengeditnya, saya akan menyalin ke repositori pakej.

Tidak tahu jika ada penyelesaian yang lebih baik.

Kemas kini

Saya jumpa pakej relative-deps yang menyelesaikan masalah perkembangan saya.

P粉064448449
P粉064448449

membalas semua(1)
P粉080643975

Memandangkan poster asal menjawab soalannya dengan menyunting soalan. Kandungan ini disiarkan untuk meningkatkan kesedaran masyarakat:


dalam npm 中,relative-deps merujuk kepada ciri yang membolehkan anda menentukan kebergantungan menggunakan laluan fail relatif dalam pakej tempatan atau ruang kerja.

Ciri ini tersedia dalam npm 版本 7 中添加的。您可以直接引用项目中的其他包或模块,而不是依赖包名称和 npm pendaftaran. p>

Ini menjadikan pembangunan lebih mudah, terutamanya untuk projek yang menggunakan monorepos atau sejumlah besar pakej yang saling berkaitan. npm 根据 package.json Laluan fail yang dinyatakan dalam fail diselesaikan dan kebergantungan dipasang.


Nota: Hanya versi npm bermula dengan v7 dan ke atas menyokong ciri ini.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan