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:
- 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.
Check out theburningmonk.com for more of my articles.
Top comments (2)
(imho) I would have used lerna independent packages, easier to manage dependencies and packages.
How would you use Lerna to deploy the serverless projects? (I've only use Lerna for managing monorepo for NPM packages)