Documentation is currently for moon v2 and latest proto. Documentation for moon v1 has been frozen and can be found here.
Nest example
In this guide, you'll learn how to integrate NestJS into moon.
Begin by creating a new NestJS project in the root of an existing moon project (this should not be created in the workspace root, unless a polyrepo).
npx @nestjs/cli@latest new nestjs-app --skip-git
View the official NestJS docs for a more in-depth guide to getting started!
Setup
Since NestJS is per-project, the associated moon tasks should be defined in each project's
moon.yml file.
layer: 'application'
fileGroups:
app:
- 'nest-cli.*'
tasks:
dev:
command: 'nest start --watch'
preset: 'server'
build:
command: 'nest build'
inputs:
- '@group(app)'
- '@group(sources)'
TypeScript integration
NestJS has built-in support for TypeScript, so there is no need for additional configuration to enable TypeScript support.
At this point we'll assume that a tsconfig.json has been created in the application, and
typechecking works. From here we suggest utilizing a global typecheck task for
consistency across all projects within the repository.
Configuration
Root-level
We suggest against root-level configuration, as NestJS should be installed per-project, and the
nest command expects the configuration to live relative to the project root.
Project-level
When creating a new NestJS project, a nest-cli.json is
created, and must exist in the project root. This allows each project to configure NestJS for
their needs.
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"type": "application",
"root": "./",
"sourceRoot": "src",
"compilerOptions": {
"tsConfigPath": "tsconfig.build.json"
}
}