As projects grow, maintaining a clean structure is essential. In this post, we will:
✅ Create a centralized shared folder
✅ Configure esbuild to support module aliases for cleaner imports
✅ Using TypeScript for development
🗂️ Step 1: Create a shared Folder
Let’s create a folder for all shared utilities and modules.
aws-sam-node-lambda/ ├── shared/ │ ├── utils.ts │ ├── constants.ts ├── functions/ | ├── function1/ │ | ├── index.ts ├── tsconfig.json └── template.yaml
shared/utils.ts
export const greet = (name: string) => `Hello, ${name}!`;
📝 Step 2: Lambda Code to Use Shared Module
In your Lambda handler:
import { greet } from '@shared/utils'; export const handler = async () => { const message = greet('AWS Lambda'); return { statusCode: 200, body: JSON.stringify({ message }) }; };
⚙️ Step 3: Configure TypeScript Path Aliases
Edit your tsconfig.json
to define path aliases:
{ "compilerOptions": { "baseUrl": ".", "paths": { "@shared/*": ["shared/*"] }, "module": "ESNext", "target": "ES2020", "moduleResolution": "Node", "outDir": "dist", "esModuleInterop": true } }
⚡ Step 4: Configure esbuild
In your template.yaml
, configure esbuild under Metadata -> BuildMethod: esbuild
:
Resources: MyFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs22.x Architectures: - arm64 Metadata: BuildMethod: esbuild BuildProperties: Minify: true Target: "es2020" Sourcemap: true EntryPoints: - functions/function1/handler.ts External: - "@aws-sdk/*"
🧠 Conclusion
By organizing your code with a shared folder and aliases, you can improve maintainability and scalability for your AWS Lambda projects. Coupled with esbuild and TypeScript, this setup is modern, fast, and production-ready.
Top comments (0)