Skip to content

tommedema/serverless-mono-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Serverless Mono Repo Typescript References example

Example repo on how to use yarn workspaces together with the serverless framework. Utilizes Typescript references.

Stack

  • Typescript (with references)
  • Lerna
  • Yarn Workspaces
  • Serverless Framework

Features

  • Typescript: all code is written in Typescript
  • Async lambda: the lamda exposes an async function to be run in node 8.10 on AWS
  • Pkg deploy: command to deploy a serverless service in a package
  • Package test without compilation: test packages using ts-node without having to compile
  • Mono repo packaging: mono repo packages can be depended upon by serverless services, and should be packaged in the serverless artifact prior to being uploaded to AWS
  • Root build: compile all package in an intelligent order based on a dependency graph from the mono repo root
  • Root test without compilation: test all packages from the root folder
  • Root deploy: one command to deploy all serverless services in the mono repo root based on dependency graph
  • External typeroots: allows you to define types for external packages to be used throughout the mono-repo
  • Lint in-editor (with tslint extension for visual studio code)
  • Prettier + lint root command
  • Prettier + lint on commit

Adding a repo

Simply create a new folder in packages and run yarn init. Prefix serverless services with the sls- prefix, such that their dependencies will not be hoisted (the serverless framework doesn't support hoisted packages at the moment). Ensure that the package has a local tsconfig.json. When your Typescript package depends on another typescript package within the mono repo, reference to it using the package's tsconfig.json.

Adding types for external packages

If your external packages does not have types available from the DefinitelyTypes project (e.g. @types/my-package), you can easily define custom typings in the special packages/types package.

Running tests

To run tests in all packages, run yarn test from the root folder.

To run tests in a specific package, run yarn test from the package's folder.

Building

To build all packages based on their dependency graph order, run yarn build from the root folder

To build a specific package including the packages it references to, run yarn build from the package folder.

Deploying

To deploy a serverless service, run yarn deploy --stage=dev --aws-profile=profile-name from the package folder. This will build the Typescript packages used by that serverless service.

To deploy all serverless services, run the same command from the root folder.

Open issues (PRs welcome)

  • Editor type safety: "on the fly" type safety without compilation does not yet work across the mono repo, see this vscode issue. Note that it seems to partially work in WebStorm.
  • Serverless artifacts contain a few redundant dependencies, presumably due to a bug in Serverless Framework's exclude dev dependencies logic. There is an initiative to create the artifact manually using yarn install --production, but this is a slow process and is therefore not yet integrated into the master branch.
  • Yarn workspace hoisting is currently disabled for serverless services

References

About

Example repo on how to use yarn workspaces together with the serverless framework.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published