https://github.com/sst/lerna-yarn-starter
SST monorepo starter that uses Lerna and Yarn Workspaces.
https://github.com/sst/lerna-yarn-starter
lerna monorepo sst yarn yarn-workspaces
Last synced: 3 months ago
JSON representation
SST monorepo starter that uses Lerna and Yarn Workspaces.
- Host: GitHub
- URL: https://github.com/sst/lerna-yarn-starter
- Owner: sst
- Created: 2021-06-22T22:29:11.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-08-13T11:39:36.000Z (about 4 years ago)
- Last Synced: 2025-06-08T01:10:32.639Z (4 months ago)
- Topics: lerna, monorepo, sst, yarn, yarn-workspaces
- Language: JavaScript
- Homepage: https://serverless-stack.com/chapters/using-lerna-and-yarn-workspaces-with-serverless.html
- Size: 279 KB
- Stars: 23
- Watchers: 3
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# SST Lerna + Yarn Workspaces Starter [](https://console.seed.run/serverless-stack/lerna-yarn-starter)
A [Serverless Stack Framework (SST)](https://github.com/serverless-stack/serverless-stack) monorepo starter that uses [Lerna](https://lerna.js.org) and [Yarn Workspaces](https://classic.yarnpkg.com/en/docs/workspaces/).
- A full-stack serverless app
- Designed to scale for larger teams
- Maintains internal dependencies as packages
- Supports publishing dependencies as private NPM packages
- Uses Yarn Workspaces to hoist packages to the root `node_modules/` directory-----
## Installation
Start by cloning this repo
``` bash
$ git clone https://github.com/serverless-stack/lerna-yarn-starter my-project
```Enter the new directory
``` bash
$ cd my-project
```Install npm packages for the entire project
``` bash
$ yarn
```## How It Works
The directory structure roughly looks like:
```
package.json
/lib
/frontend
package.json
/src
/services
/service1
handler.js
package.json
/service2
handler.js
package.json
/packages
/sample-package
index.js
package.json
/util
```This repo is split into a few parts. Each with a different purpose:
- `lib/`
This is where the CDK code for your app lives. It defines the infrastructure of your serverless app.
- `src/`
This is where the code for your Lambda function are. It is further organized into services. Where each service is a collection of Lambda functions.
- `src/services/`
These are services that are deployed as Lambda functions. Has a `package.json` and an entry point. There are two sample services.
1. `service1`: Depends on the `sample-package`.
2. `service2`: Does not depend on any internal packages.- `src/packages/`
These are internal packages that are used in our services. Each contains a `package.json` and can be optionally published to npm.
- `src/util/`
Any common code that you might not want to maintain as a package. Does NOT have a `package.json`.
- `frontend/`
A sample frontend React app that is a part of our serverless app.
The `src/packages/`, `src/services/`, and `frontend/` directories are Yarn Workspaces.
### Services
Each service is a collection of Lambda functions with a similar purpose. They are meant to be managed on their own. They each have their own `package.json` and the versions of the dependencies should be kept separate from the other services. SST internally uses [esbuild](https://github.com/evanw/esbuild) to optimally package each Lambda function in a service.
This is good for keeping your Lambda packages small. But Yarn Workspaces also ensures that it hoists all your npm packages to the project root.
### Packages
Since each package has its own `package.json`, you can manage it just like you would any other npm package.
To add a new package:
``` bash
$ mkdir src/packages/new-package
$ yarn init
```Packages can also be optionally published to npm.
To use a package:
```bash
$ yarn add new-package@1.0.0
```Note that packages should be added by specifying the version number declared in their `package.json`. Otherwise, Yarn tries to find the dependency in the registry.
### Util
If you need to add any other common code in your repo that won't be maintained as a package, add it to the util directory. It does not contain a `package.json`. This means that you'll need to install any npm packages as dependencies in the root.
To install an npm package at the root.
``` bash
$ yarn add -W some-npm-package
```While it's convenient to add all the common code to the util, it has a downside. If a team updates the util, all the services that are dependent on it will need to test this change before deploying. In contrast, a package can be locked to a specific version and can be upgraded when the team chooses to.
## Deployment
SST will handle all the dependencies internally and deploy all the services (and the frontend) in order.
## Deploying Through Seed
[Seed](https://seed.run) supports deploying SST monorepo projects that use Lerna and Yarn Workspaces out of the box.
-------
This repo is maintained by [Serverless Stack](https://serverless-stack.com/).