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

M1 Mac下无法将Node.js+TypeScript部署到AWS CDK+Lambda求助

问题分析与解决方案

核心问题是M1 Mac(arm64架构)运行amd64架构的Docker镜像时,qemu模拟出现段错误,同时本地esbuild无法运行导致CDK切换到Docker打包流程。以下是具体解决步骤:

1. 优先修复本地esbuild运行问题,跳过Docker打包

CDK的NodejsFunction默认使用本地esbuild打包,本地运行失败才会触发Docker打包。针对M1 Mac:

  • 卸载全局esbuild:
    npm uninstall -g esbuild
    
  • 安装适配arm64架构的esbuild版本:
    npm install -g esbuild@0.14.x --platform=darwin --arch=arm64
    
  • 项目本地也安装esbuild依赖:
    npm install esbuild --save-dev
    
  • 修改lib/cdk-test-stack.ts中的NodejsFunction配置,强制使用本地打包,并直接用TS入口文件(无需手动编译到build目录):
    new lambdaNodejs.NodejsFunction(this, 'TestHandler', {
        runtime: lambda.Runtime.NODEJS_14_X,
        handler: 'handler',
        entry: './src/index.ts', // 直接指向TS源码,esbuild自动编译打包
        bundling: {
            local: true, // 强制本地打包,禁用Docker
        },
    });
    

2. 若必须使用Docker打包,指定镜像架构

如果本地esbuild仍有问题,可强制Docker使用arm64架构的打包镜像:

new lambdaNodejs.NodejsFunction(this, 'TestHandler', {
    runtime: lambda.Runtime.NODEJS_14_X,
    handler: 'handler',
    entry: './src/index.ts',
    bundling: {
        dockerImage: lambdaNodejs.DockerImage.fromRegistry('public.ecr.aws/sam/build-nodejs14.x:latest'),
        platform: 'linux/arm64', // 指定arm64平台,避免qemu模拟错误
    },
});

3. 可选:升级CDK版本

你当前使用的CDK 2.42版本较旧,新版本(2.50+)对M1 Mac的arm64架构支持更完善:

  • 升级全局CDK:
    npm install -g aws-cdk@latest
    
  • 升级项目依赖:
    npm update aws-cdk-lib @aws-cdk/aws-lambda-nodejs
    

额外检查项

  • 确认本地Node.js为arm64架构(从Node官网下载arm64安装包,或用nvm指定arch安装);
  • 移除手动编译TS的脚本,NodejsFunction会通过esbuild自动完成TS编译与打包,无需维护build目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:46:33