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

如何用Terraform部署TypeScript Gen2云函数?依赖加载失败求助

Gen2 TypeScript云函数Cloud Build部署解决方案

项目结构规范

先确认项目结构符合以下标准,避免路径类问题:

your-function/
├── src/
│   └── index.ts       # 函数核心代码文件
├── package.json
├── tsconfig.json
└── cloudbuild.yaml

1. 配置package.json

重点区分运行时依赖与开发依赖,确保函数运行必需的包处于dependencies字段中:

{
  "name": "gen2-ts-function",
  "version": "1.0.0",
  "main": "dist/index.js", // 指向编译后的JS入口文件
  "scripts": {
    "build": "tsc", // TypeScript编译命令
    "start": "functions-framework --target=helloWorld --port=8080" // 本地调试用
  },
  "dependencies": {
    "@google-cloud/functions-framework": "^3.0.0" // 运行时核心依赖,禁止放入devDependencies
    // 其他业务依赖,如axios、lodash等
  },
  "devDependencies": {
    "typescript": "^5.0.0",
    "@types/node": "^20.0.0"
  }
}

2. 配置tsconfig.json

确保编译输出到dist目录,且配置匹配Node.js运行环境:

{
  "compilerOptions": {
    "target": "ES2020", // 匹配Node.js 20版本
    "module": "commonjs",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

3. 编写Cloud Build配置(cloudbuild.yaml)

这是解决依赖丢失问题的核心,让Cloud Build完成依赖安装→TS编译→生产依赖精简→部署全流程:

steps:
  # 安装所有依赖(含开发依赖用于TS编译)
  - name: 'node:20'
    entrypoint: 'npm'
    args: ['install']

  # 编译TypeScript代码到dist目录
  - name: 'node:20'
    entrypoint: 'npm'
    args: ['run', 'build']

  # 移除开发依赖,仅保留运行时必需包(可选,减小部署包体积)
  - name: 'node:20'
    entrypoint: 'npm'
    args: ['install', '--production']

  # 部署Gen2云函数
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    entrypoint: 'gcloud'
    args:
      - 'functions'
      - 'deploy'
      - 'helloWorld' # 替换为你的函数名称
      - '--gen2'
      - '--runtime=nodejs20' # 匹配你的Node.js版本
      - '--region=us-central1' # 替换为你的部署区域
      - '--source=.' # 部署当前目录(包含dist、node_modules、package.json)
      - '--entry-point=helloWorld' # 替换为TS文件中导出的函数名
      - '--trigger-http' # 根据触发器类型调整,如--trigger-topic=my-topic

4. 关键避坑点

  • 禁止仅归档src文件夹部署,必须包含编译后的dist目录和运行时依赖node_modules。
  • @google-cloud/functions-framework必须放在dependencies中,否则部署后会找不到核心运行模块。
  • 部署时的--entry-point参数必须与TS文件中导出的函数名完全一致(如export const helloWorld = ...)。
  • 手动触发Cloud Build时,确保当前工作目录为项目根目录,且已为Cloud Build授予Cloud Functions部署权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:21:48