aws-sam-cli icon indicating copy to clipboard operation
aws-sam-cli copied to clipboard

Feature request: Skip npm install

Open tapz opened this issue 11 months ago • 5 comments

Describe your idea/feature/enhancement

As we have our own esbuild SAM build shoud not run npm install. Also, npm install does not seem to work with a monorepo. It tries to fetch the files from npm registry and thus requires .npmrc in all nested stacks. So, please add a flag to skip npm install. Would also be nice to be able to specify for some nested stacks that no build is needed as they are run in Docker containers.

Proposal

Additional Details

tapz avatar Jan 24 '25 10:01 tapz

Hi tapz, thanks for reaching out, do you mind explain the issue you have a bit more?

From what I perceive, if want to use esbuild in sam build, you can refer to this doc for using esbuild for sam build: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-using-build-typescript.html

And if esbuild is handling all the build, you can even skip the sam build and directly use the built assets for deploy or sync command.

Please let me know, Thanks

roger-zhangg avatar Jan 24 '25 19:01 roger-zhangg

I first use custom pre build scripts, which use esbuild. The in the SAM templates I use makesfiles to copy lambda source files. So no need for SAM build to install dependencies when build is already done and files copied.

tapz avatar Jan 25 '25 17:01 tapz

Thank you for the additional information. Let's keep this issue open to collect more feedback and support from our community. We will prioritize the feature accordingly.

vicheey avatar Feb 17 '25 08:02 vicheey

I'm in the same situation as @tapz

We are in a monorepo as well.

Context: Our nodejs lambda already has its own npm run build command and is deployed using gitlab. We wanted to plug AWS SAM to be able to test locally and to let developers deploy their own version of the service on our dev environment. However we did not want to change our current deployment pipeline to avoid a hard dependency with AWS SAM.

To achieve this goal, we had to add to the template.yaml:

    Metadata:
      BuildMethod: makefile

and in the makefile

build-ourLambdaFunction:
        # Purpose: have the same build system for AWS SAM and Gitlab CI/CD
	npm run build
	cp ./dist/* $(ARTIFACTS_DIR)

I wanted to add the launch.json file at the root of the monorepo to be able to debug the lambda with breakpoints. When running it, it actually executes:

2025-04-08 14:43:00.067 [info] Command: (not started) [/usr/local/bin/sam build --build-dir /tmp/aws-toolkit-vscode/vsctke35b9267/output --template /tmp/aws-toolkit-vscode/vsctke35b9267/app___vsctk___template.yaml --base-dir /home/node/lambdas/my-validator]
2025-04-08 14:43:00.700 [info] Building codeuri: /home/node/lambdas/my-validator runtime: nodejs20.x architecture: x86_64 functions: myvalidator
2025-04-08 14:43:00.748 [info] Running NodejsNpmBuilder:NpmPack
2025-04-08 14:43:10.844 [info] Running NodejsNpmBuilder:CopyNpmrcAndLockfile
2025-04-08 14:43:10.845 [info] Running NodejsNpmBuilder:CopySource
2025-04-08 14:43:10.848 [info] Running NodejsNpmBuilder:NpmInstall
2025-04-08 14:44:40.854 [error] SamLaunchRequestError: "sam build" failed. Timed out waiting for build. [BuildFailure]

The build is failing.

rev42 avatar Apr 08 '25 18:04 rev42