繁体   English   中英

Firebase 函数部署错误 [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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM