---
title: NestJS Momorepo
tags: nest, monorepo
---
# 建立專案
```shell=
nest new webrepos
cd webrepos
nest g app svc01
nest g app svc02
nest g library common
```
# 修改nest-cli.json
* 移除webrepos區塊
* 設定啟動專案
```json
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "apps/svc01/src",
"monorepo": true,
"root": "apps/svc01",
"compilerOptions": {
"webpack": true,
"tsConfigPath": "apps/svc01/tsconfig.app.json"
},
"projects": {
"svc01": {
"type": "application",
"root": "apps/svc01",
"entryFile": "main",
"sourceRoot": "apps/svc01/src",
"compilerOptions": {
"tsConfigPath": "apps/svc01/tsconfig.app.json"
}
},
"svc02": {
"type": "application",
"root": "apps/svc02",
"entryFile": "main",
"sourceRoot": "apps/svc02/src",
"compilerOptions": {
"tsConfigPath": "apps/svc02/tsconfig.app.json"
}
},
"common": {
"type": "library",
"root": "libs/common",
"entryFile": "index",
"sourceRoot": "libs/common/src",
"compilerOptions": {
"tsConfigPath": "libs/common/tsconfig.lib.json"
}
}
}
}
```
# 執行命令
```shell
npm run start:dev
npm run start:dev svc02
npm run build
npm run build svc02
node dist/apps/svc01/main
node dist/apps/svc02/main
```
# 加入Dockerfile
```dockerfile
FROM node:lts-alpine as build
WORKDIR /app
COPY package*.json .
RUN npm install
COPY . .
RUN npm run build
FROM node:lts-alpine as base
WORKDIR /app
COPY package.json .
RUN npm install --only=production
COPY --from=build /app/dist /app/dist
CMD ["node", "dist/apps/svc01/main"]
```
## 加入docker-compose
* docker-compose up --build
```yaml
version: '3.5'
services:
svc01:
image: svc01:local
build:
context: .
dockerfile: ./Dockerfile
target: build
env_file:
- ./apps/svc01/.env
command: npm run start:dev svc01
volumes:
- .:/app
- /app/node_modules
svc02:
image: svc02:local
build:
context: .
dockerfile: ./Dockerfile
target: build
env_file:
- ./apps/svc01/.env
command: npm run start:dev svc02
volumes:
- .:/app
- /app/node_modules
```