【问题标题】:Cannot deploy/serve Firebase with error: No "exports" main defined in package.json [closed]无法部署/服务 Firebase 并出现错误:package.json 中未定义“导出”主 [关闭]
【发布时间】:2021-10-26 19:33:39
【问题描述】:

'firebase' npm 包用于 Functions 后端 .initializeApp(config) 和 .Auth().signInWithEmailAndPassword(邮箱、密码)

Firebase 部署/服务抛出此错误:

!  Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in <project path>\functions\node_modules\firebase\package.json
at throwExportsNotFound (internal/modules/esm/resolve.js:299:9)
at packageExportsResolve (internal/modules/esm/resolve.js:522:3)
at resolveExports (internal/modules/cjs/loader.js:449:36)
at Function.Module._findPath (internal/modules/cjs/loader.js:489:31)
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:875:27)
at Function.Module._load (internal/modules/cjs/loader.js:745:27)
at Module.require (internal/modules/cjs/loader.js:961:19)
at require (internal/modules/cjs/helpers.js:92:18)
at Object.<anonymous> (<project path>\functions\APIs\users.js:4:18)
at Module._compile (internal/modules/cjs/loader.js:1072:14)

!我们无法加载您的函数代码。 (见上文)

const firebase = require("firebase");

重新安装 firebase 包、更新 Node、npm 和使用“firebase-admin”并没有解决问题。 如果您能提供帮助,我将不胜感激。

【问题讨论】:

  • 查看您安装了哪个版本的 firebase 会很有帮助,因为问题似乎是在“users.js”中调用了 firebase。因此,查看“users.js”中的代码也会很有帮助。但是,我怀疑问题是在您尝试使用 firebase@8 编写代码时安装了 firebase@9。
  • 我认为您正在使用新的 firebase 版本。在 pakage.json 文件中将 firebase npm 版本编辑为 ^7.13.1 并重新安装。
  • 如果您正在关注 freeCodeCamp how-to-build-a-todo-application-using-reactjs-and-firebase 文章,您可能会遇到他们在firebase web 版本 8.x,而您使用的是 9.x 版本。出于各种(好的)原因,它们从命名空间变为模块化。看到这个:firebase.google.com/docs/auth/web/password-auth#web-version-9_1
  • 也许要求不适用于最新版本。我只是按照@MuhammedAnasU 的建议使用 ^7.13.1 等较低版本重新安装它。然后它对我来说很好。谢谢。

标签: node.js firebase


【解决方案1】:

Firebase js sdk 仅供客户端使用。为了从您的后端环境(即云功能、节点后端等)与 Firebase 交互,您必须使用 admin-sdk。

请记住,由于 admin-sdk 在安全、受信任的环境中运行,它具有提升的权限并且会绕过安全规则,因此请确保您在函数中验证数据。

您可以在此处查看 admin-sdk 的完整文档:Firebase Admin SDK

【讨论】:

  • 我下面的教程使用它来firebase..Auth().signInWithEmailAndPassword()。当我寻找如何使用 firebase-admin 时,我发现 firebase 包可用于用户身份验证。你的意思是我应该从前端到 firebase 身份验证,而不是通过函数?
  • @SupathiRatnayake signInWithEmailAndPassword() 是客户端 sdk(移动、Web 等)中的一个函数,因此必须在您的前端代码中使用。如果您能够提供代码和用例的更多示例,那么我们可以为您提供更好的答案
  • 所以我有一个与firebasefirebase-admin 一起使用的库,它同时用于前端和后端。它引用了两者。我该如何解决这个错误?
猜你喜欢
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 2021-10-07
相关资源
最近更新 更多