Yan Cui
I help clients go faster for less using serverless technologies.
A while back, a client asked me “how can I share business logic between services in a Node.js monorepo?”. The TL;DR of it is:
- Encapsulate the shared business logic into modules, and put them in a separate folder.
- In the Lambda handler functions, reference the shared modules using relative paths.
- Use webpack to resolve and bundle them into the deployment package. If you use the Serverless framework, then check out the serverless-webpack plugin. For example:
(if webpack is not your thing then also check out the newer serverless-esbuild plugin which can achieve the same thing)
- Deploy every service on every commit. You can do this with a simple script like the following.
To see how everything fits together, check out this demo repo. It has CI/CD set up already through drone.io and you can see a recent deployment of all the services in the monorepo here.
But wait! How do I choose between having a monorepo vs a repo per service?
Don’t worry, I’ve got you covered for that too ;-) You can read about my thoughts on the two approaches here.
Whenever you’re ready, here are 4 ways I can help you:
- If you want a one-stop shop to help you quickly level up your serverless skills, you should check out my Production-Ready Serverless workshop. Over 20 AWS Heroes & Community Builders have passed through this workshop, plus 1000+ students from the likes of AWS, LEGO, Booking, HBO and Siemens.
- If you want to learn how to test serverless applications without all the pain and hassle, you should check out my latest course, Testing Serverless Architectures.
- If you’re a manager or founder and want to help your team move faster and build better software, then check out my consulting services.
- If you just want to hang out, talk serverless, or ask for help, then you should join my FREE Community.