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

基于Turborepo+pnpm的Node.js Monorepo部署AWS Lambda依赖问题

最优解决方案:用pnpm Deploy + Turborepo 构建流程搞定Lambda部署

针对你这种Turborepo+pnpm的monorepo场景,pnpm自带的deploy命令是解决依赖软链接问题的最优方案——它专门为部署场景设计,能把目标项目的所有依赖(包括内部共享包)都复制成实体文件,还能自动过滤冗余依赖,完美适配AWS Lambda的独立部署要求。

具体操作步骤

1. 先完成全项目构建

先跑Turborepo的构建命令,确保共享包packages/platform和目标项目apps/project1的TypeScript代码都编译完成:

pnpm build

Turborepo会自动按照turbo.json里的任务依赖顺序,先构建共享组件,再处理业务项目。

2. 用pnpm Deploy生成独立部署目录

在monorepo根目录执行以下命令,把project1和所有依赖(包括platform的实体文件)导出到一个临时部署目录:

pnpm deploy --filter=project1 --prod dist/deploy/project1

参数说明:

  • --filter=project1:指定只处理project1这个工作区项目
  • --prod:只保留生产依赖,大幅减少打包体积
  • dist/deploy/project1:自定义的目标部署目录,可根据需求修改

执行完后,这个目录里的内容完全符合Lambda要求:

  • project1编译后的所有业务代码
  • 所有依赖(包括platform的实体文件,没有软链接)
  • 精简后的package.json(仅保留生产依赖和必要脚本)

3. 打包上传到AWS Lambda

进入生成的部署目录,打包成zip文件就能直接上传Lambda:

cd dist/deploy/project1
zip -r lambda-deploy.zip .

如果是CI流程(GitLab CI/CodePipeline),可以直接整合AWS CLI或Serverless Framework的命令自动完成上传,比如GitLab CI的示例片段:

deploy_lambda:
  stage: deploy
  script:
    - pnpm install
    - pnpm build
    - pnpm deploy --filter=project1 --prod dist/deploy/project1
    - cd dist/deploy/project1 && zip -r lambda-deploy.zip .
    - aws lambda update-function-code --function-name your-lambda-name --zip-file fileb://lambda-deploy.zip

为什么这个方案比你之前的尝试更靠谱

  • 避开cp -rL的文件冲突问题:pnpm deploy会智能解析依赖树,不会出现目录覆盖非目录的错误
  • 自动过滤冗余依赖:--prod参数只保留生产环境必需的依赖,减少Lambda包体积
  • 原生支持工作区依赖:自动把内部共享包platform的实体文件复制到部署目录,无需手动处理软链接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:24:59