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

如何部署依赖共享文件夹代码的Cloud Run Job?

问题分析

你遇到的核心问题是:Cloud Run 默认部署时仅会上传当前工作目录(即my-job文件夹)的内容,上级的shared文件夹不会被包含到部署包中。你用file:../../../shared配置的本地依赖,在Cloud Run的部署环境里根本找不到对应的文件路径,最终导致运行时模块缺失报错。

另外你的start脚本也有问题:直接用node index.ts无法执行TypeScript文件,需要先编译成JS,或者用ts-node运行。

解决方案

以下是几种可行的解决方式,按推荐程度排序:

方案1:使用Monorepo工作区配置(最规范)

通过工作区让Cloud Run识别跨目录依赖:

  1. 在项目根目录(jobs和shared同级的目录)创建根package.json:
{
  "name": "my-project",
  "private": true,
  "workspaces": [
    "jobs/src/my-job",
    "shared"
  ]
}
  1. 修改my-job的package.json,将依赖改为工作区包名:
"dependencies": {
  "shared": "*",
  "firebase-functions": "^6.3.2"
}
  1. 切换到项目根目录执行部署命令,指定根目录为部署上下文:
gcloud run jobs deploy my-job --source . --region 你的部署区域

Cloud Run会上传整个根目录的内容,工作区依赖会被正确安装。

方案2:打包Shared模块并嵌入部署包

如果不想用工作区,可以把shared打包成本地包后复制到my-job目录:

  1. 在shared目录执行打包:
cd shared
npm run build # 先编译TypeScript到JS(需配置shared的tsconfig)
npm pack # 生成如shared-0.1.0.tgz的本地包
  1. 把生成的tgz包复制到my-job目录:
cp shared-0.1.0.tgz ../jobs/src/my-job/
  1. 修改my-job的package.json依赖:
"dependencies": {
  "shared": "./shared-0.1.0.tgz",
  "firebase-functions": "^6.3.2"
}
  1. 正常部署my-job目录即可,此时tgz包会被包含在部署文件中,npm能正确安装。

方案3:直接复制Shared源码到部署目录(简单但不推荐)

如果项目规模小,可直接复制源码:

  1. 把shared/src下的所有文件复制到my-job/src/shared目录
  2. 修改index.ts中的引用路径为相对路径:
// 原引用
import { xxx } from 'shared/src/code';
// 修改后
import { xxx } from './shared/code';
  1. 直接部署my-job目录即可。
额外优化:修复Start脚本

TypeScript文件无法直接用node执行,需调整my-job的package.json脚本:

"scripts": {
  "build": "tsc",
  "start": "node dist/index.js"
}

确保tsconfig.json配置了正确的编译输出目录(如dist),Cloud Run会自动执行npm run build完成编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:43:12