![](/img/trans.png)
[英]firebase functions deploy error : ERR_PACKAGE_PATH_NOT_EXPORTED
[英]Firebase Functions Deploy Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined
每当我尝试部署 firebase 函数时,我都会收到以下错误:
无法从源加载 function 定义:无法从 function 源生成清单:错误 [ERR_PACKAGE_PATH_NOT_EXPORTED]:没有“导出”主要定义在...\firebase\package.json
stackoverflow 中的所有解决方案似乎都指向包导入错误,但我在这里遵循了官方 firebase 文档,我的导入看起来完全一样。 更不用说这段代码几周前还可以运行,现在却无法部署。 我还将我的 firebase-functions、firebase-admin 和 firebase-tools 包更新到最新版本。
下面是我的文件结构:
下面是我的 index.js 文件代码:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
const firebaseConfig = {
//my firebase settings
};
// Initialize Firebase
const firebase = require("firebase");
firebase.initializeApp(firebaseConfig);
exports.addUserToFirestore = functions.auth.user().onCreate((user) =>{
const usersRef = admin.firestore().collection("users");
const providerData = user.providerData;
providerData.forEach((element) => {
if (element.providerId=="google.com") {
return usersRef.doc(user.uid).set({
uID: user.uid,
}).then(() => {
return admin.auth().updateUser(user.uid, {
emailVerified: true,
displayName: user.email,
});
});
} else if (element.providerId=="phone") {
return usersRef.doc(user.uid).set({
uID: user.uid,
}).then(() => {
return admin.auth().updateUser(user.uid, {
displayName: user.phoneNumber,
});
});
}
});
});
exports.addEmailUser = functions.https.onCall((data, context) => {
return admin.auth().createUser({
email: data.email,
emailVerified: false,
password: data.password,
displayName: data.username,
}).then((userRecord) => {
const usersRef = admin.firestore().collection("users");
return usersRef.doc(userRecord.uid).set({
uID: userRecord.uid,
});
});
});
exports.updateUser = functions.https.
onCall((data, context) => {
const usersRef = admin.firestore().collection("users");
return admin.auth().getUser(context.auth.uid).then((userRecord) =>{
userRecord.providerData.forEach((element) => {
if (element.providerId=="google.com") {
return admin.auth().updateUser(context.auth.uid, {
displayName: data.username,
}).then((userRecord) => {
return usersRef.doc(context.auth.uid).update({
username: data.username,
});
});
} else if (element.providerId=="phone") {
return admin.auth().updateUser(context.auth.uid, {
displayName: data.username,
}).then((userRecord) => {
return usersRef.doc(context.auth.uid).update({
username: data.username,
});
});
} else if (element.providerId=="password") {
return admin.auth().updateUser(context.auth.uid, {
email: data.email,
password: data.password,
displayName: data.username,
}).then((userRecord) => {
return usersRef.doc(context.auth.uid).update({
email: data.email,
username: data.username,
});
});
}
});
});
});
exports.addNewSite = functions.https.onCall((data, context) => {
const usersRef = admin.firestore().collection("users");
return usersRef.doc(context.auth.uid).collection("passwords").add({
siteName: data.siteName,
siteUrl: data.siteUrl,
logins: data.logins,
}).then((siteRecord) => {
return usersRef.doc(context.auth.uid).collection("passwords").
doc(siteRecord.id).update({
siteId: siteRecord.id,
loginsCount: admin.firestore.FieldValue.increment(1),
}).then(() =>{
return usersRef.doc(context.auth.uid).collection("passwords").
doc("data").set({
documentCount: admin.firestore.FieldValue.increment(1),
}, {merge: true}).then(() =>{
return siteRecord.id;
});
});
});
});
exports.deleteUserFromFirestore = functions.auth.user().onDelete((user)=>{
const usersRef = admin.firestore().collection("users");
return usersRef.doc(user.uid).collection("passwords").get().
then((querySnapshot) => {
querySnapshot.forEach((doc) => {
usersRef.doc(user.uid).collection("passwords").
doc(doc.id).delete().catch((error) => {
return error;
});
});
return usersRef.doc(user.uid).collection("settings").get().
then((querySnapshot) => {
querySnapshot.forEach((doc) => {
usersRef.doc(user.uid).collection("settings").
doc(doc.id).delete().catch((error) => {
return error;
});
});
return usersRef.doc(user.uid).delete();
});
});
});
下面是我的函数文件夹中的 package.json:
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "eslint .",
"serve": "firebase emulators:start --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "16"
},
"main": "index.js",
"dependencies": {
"firebase": "^9.15.0",
"firebase-admin": "^11.4.1",
"firebase-functions": "^4.1.1"
},
"devDependencies": {
"eslint": "^8.9.0",
"eslint-config-google": "^0.14.0",
"firebase-functions-test": "^0.2.0"
},
"private": true
}
任何帮助,将不胜感激。
您正在使用两个不同的 SDK。 firebase-admin
用于服务器, firebase
用于客户端。 我假设您想改用firebase-admin
。 要解决这些问题,请删除以下代码行:
const firebaseConfig = {
//my firebase settings
};
// Initialize Firebase
const firebase = require("firebase");
firebase.initializeApp(firebaseConfig);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.