Rumah > Soal Jawab > teks badan
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粉0806439752023-09-11 09:27:04
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.