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

如何从npm workspaces目录创建Lambda独立Node包归档

npm workspaces monorepo 打包Lambda依赖缺失解决方案

不需要把代码复制到monorepo外的新目录,有两种可直接落地的处理方式,解决依赖提升导致的打包缺依赖问题:

方法1:配置nohoist规则禁止lambda包的依赖被提升

直接修改仓库根目录的package.json,在workspaces配置项中添加nohoist规则,指定lambda包下的所有依赖不参与全局提升:

{
  "workspaces": {
    "packages": ["packages/*"],
    "nohoist": [
      "packages/lambda/**",
      "packages/lambda/**/**"
    ]
  }
}

配置完成后,删除根目录、lambda目录下的node_modules文件夹和锁文件,重新执行npm install即可。配置后lambda包的所有依赖(包括子依赖)都会完整安装在./packages/lambda/node_modules目录下,不会被提升到根目录,后续打包直接压缩lambda目录内容即可。

注意:两条通配规则需要同时配置,第一条匹配lambda包的直接依赖,第二条匹配依赖的子依赖,避免出现部分子依赖仍被提升的问题。

方法2:单独在lambda目录下安装生产依赖(不修改全局配置)

如果不想调整整个monorepo的依赖提升规则,不需要修改根目录配置,直接进入./packages/lambda目录执行安装命令即可:

cd packages/lambda
npm install --production --install-links

参数说明:

  • --production:仅安装dependencies下的运行时依赖,跳过devDependencies,符合Lambda运行环境要求,同时能减小最终包体积
  • --install-links:将所有被提升到根目录的依赖、本地workspace软链依赖,都以实体文件的形式安装到当前包的node_modules下,不会保留指向根目录的软链接,避免Lambda环境找不到依赖。

打包校验

安装完成后可以随机抽查几个./packages/lambda/node_modules下的依赖目录,确认不是软链接形式,之后直接在lambda目录下执行打包即可,示例命令:

zip -r lambda-deploy.zip . -x "*.ts" "*.test.*" "node_modules/.cache/*"

生成的lambda-deploy.zip包含所有运行需要的代码和依赖,可直接上传到AWS Lambda使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:15:37