Nx monorepo Nestjs + Angular

Reading time ~3 minutes

На официальном сайте Nx я не смог найти готовых примеров конфигурации Nx для развертывания workspace - Angular + Nest.js. После некоторых поисков нашел такой пример на StackOverflow - NX Monorepo (NestJS/Angular).

Ниже привел более подробный вариант описания этого способа.

Первоначальное решение

Устанавливаем Nx глобально в системе - для более удобной последующей работы:

1
nx globally npm i -g nx

Переходим к процессу развертывания - инициализируем новый workspace командой Installation:

1
2
3
4
5
npx create-nx-workspace

Need to install the following packages:
create-nx-workspace@19.2.3
Ok to proceed? (y)

… задаем имя для нового проекта:

1
Where would you like to create your workspace? ‣ awesome-project 

… на вопрос о выборе предпочтительного стека отвечаем - None - сами наполним workspace нужными стеками чуть позднее:

1
2
3
4
5
6
7
? Which stack do you want to use? …

None:          Configures a TypeScript/JavaScript project with minimal structure.
React:         Configures a React application with your framework of choice.
Vue:           Configures a Vue application with your framework of choice.
Angular:       Configures a Angular application with modern tooling.
Node:          Configures a Node API application with your framework of choice.

… на вопрос о выборе типа репозитория - выбираем - Integrated Monorepo:

1
2
3
4
5
? Package-based monorepo, integrated monorepo, or standalone project? …

Package-based Monorepo:     Nx makes it fast, but lets you run things your way.
Integrated Monorepo:        Nx creates a monorepo that contains multiple projects.
Standalone:                 Nx creates a single project and makes it fast.

… на предложение воспользоваться Nx Cloud отвечаем, что не хотим - Skip for now:

1
2
3
4
5
6
7
? Do you want Nx Cloud to make your CI fast? …

(it's free and can be disabled any time)
Yes, enable Nx Cloud
Yes, configure Nx Cloud for GitHub Actions
Yes, configure Nx Cloud for Circle CI
Skip for now

… процесс инициализации занимает некоторое время, после чего получаем готовый пустой workspace:

1
2
3
4
 NX   Creating your v19.2.3 workspace.

✔ Installing dependencies with npm
✔ Successfully created the workspace: awesome-project.

… переходим во вновь созданный проект:

1
cd awesome-project

… добавляем необходимые Nx-зависимости:

1
npm i -D @nx/angular @nx/nest @nx/js

… затем генерируем в workspace фронтенд на angular - @nx/angular:

1
nx g @nx/angular:app frontend-part

… затем генерируем бекенд на nestjs - @nx/nest:

1
nx g @nx/nest:app backend-part

… генерируем shared library @nx/js:library:

1
nx g @nx/js:lib shared-lib

С этого момента у нас есть базовая настройка. Мы можете импортировать общую библиотеку следующим образом::

1
import { sharedLib } from "@my-project/shared-lib";

Если в дальнейшем в проекте планируется использовать Prisma и PostgreSQL, то по дальнейшим шагам можно ознакомиться здесь - Prisma - установка в Nest-проекте.

Дополнительные источники

В процессе общения по текущей теме в Discord (Nx-форум) c пользователем @rujorgensen последний любезно предложил свой вариант готового решения - nx-workspace.

Можно сделать fork репозитория - и попробовать использовать его, как вариант.

Проверка первоначального решения

Как проверка работоспособности первоначального решения - привожу ссылку на учебный проект Task Manager.

На момент написания статьи - проект находится в стадии разработки.


VSC - explorer.compactFolders

В Visual Studio Code по умолчанию стоит настройка, которая отображает на владке Explorer вложенные папки таким образом:![VSC - Default Vi...… Continue reading

Flattering operators

Published on July 12, 2024

Оператор withLatestFrom

Published on July 03, 2024