You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Functions部署失败 提示找不到/shared/package.json文件

错误根因

Firebase Functions 部署时默认仅上传backend/functions目录下的内容到云端构建环境,你引用的shared目录位于functions目录的上层,云端构建环境中不存在../../shared这个路径,因此npm安装依赖时无法找到对应的包文件,才会抛出ENOENT报错。前端本地开发时可以正常访问项目根目录下的shared文件夹,所以不会触发该错误。

可行解决方案

方案1:使用npm pack打本地压缩包(改造成本最低)

  • 进入shared目录执行npm pack命令,执行完成后会生成类似my-shared-1.0.0.tgz的压缩包文件
  • 在backend/functions目录下新建local-packages文件夹,将上面生成的tgz文件移入该文件夹
  • 修改functions的package.json中的依赖配置为:
    "my-shared": "file:./local-packages/my-shared-1.0.0.tgz"
    
  • 后续更新shared代码后,重新执行pack命令覆盖tgz文件即可正常部署

方案2:修改firebase配置,上传shared目录到构建环境

  • 打开backend/firebase.json,修改functions配置项,将部署根目录调整为backend目录,同时配置ignore规则过滤不需要上传的文件,示例配置如下:
    {
      "functions": {
        "source": ".",
        "ignore": [
          "node_modules",
          ".git",
          "frontend/**",
          "**/node_modules/**"
        ],
        "predeploy": [
          "npm --prefix ./shared run build",
          "npm --prefix ./functions run build"
        ]
      }
    }
    
  • 同步修改functions的package.json中的依赖路径为相对于新部署根目录的路径:
    "my-shared": "file:../shared"
    
  • 该方案无需每次手动打压缩包,shared代码更新后直接执行部署命令即可,predeploy配置会自动先编译共享包再部署

方案3:使用Monorepo工具管理(适合中大型项目)

如果项目后续会新增更多共享模块,可以采用pnpm Workspace、Nx等Monorepo管理工具,配置依赖打包规则,部署时自动将共享包的产物打包进functions的构建输出中,该方案改造成本较高,但长期维护性更好。

注意事项

无论采用哪种方案,部署前都要确保shared目录已经执行过npm run build命令,编译生成了lib目录下的产物,否则即使路径配置正确也会出现找不到导出模块的错误。

内容的提问来源于stack exchange,提问作者Yetispapa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:36:03