Налаштування Monorepo (Nx) для веб-проекту

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Monorepo (Nx) для веб-проекту
Складна
~3-5 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування Monorepo (Nx) для веб-проекту

Nx—не просто build system з кешуванням, а повнофункціональна платформа для monorepo: генератори коду, плагіни для кожного фреймворку, граф залежностей з візуалізацією, можливість запускати тільки вплинені проекти. Підходить для великих команд і складних проектів, де Turborepo буде відчуватися недостатнім.

Nx vs Turborepo: принципова різниця

Turborepo—task runner з кешем. Не знає про вміст ваших пакетів.

Nx—розуміє структуру: знає, що це Next.js додаток, що то—NestJS, може генерувати компоненти, модулі, тести за шаблонами. Плагін @nx/next налаштовує правила кешування, генератори, завдання—все автоматично.

Турбо підходить, коли вже є сформований стек й потрібно тільки прискорити CI. Nx підходить, коли команда велика й потрібна стандартизація розробки.

Ініціалізація

# Новий workspace
npx create-nx-workspace@latest acme --preset=apps
cd acme

# Додаємо додатки
npx nx generate @nx/next:app web --directory=apps/web
npx nx generate @nx/react:app admin --directory=apps/admin --bundler=vite
npx nx generate @nx/node:app api --directory=apps/api --framework=express

# Додаємо бібліотеки
npx nx generate @nx/react:lib ui --directory=packages/ui --component
npx nx generate @nx/js:lib utils --directory=packages/utils
npx nx generate @nx/js:lib types --directory=packages/types --bundler=none

Структура й nx.json

// nx.json
{
  "$schema": "./node_modules/nx/schemas/nx-schema.json",
  "targetDefaults": {
    "build": {
      "cache": true,
      "dependsOn": ["^build"],
      "inputs": ["production", "^production"]
    },
    "lint": {
      "cache": true
    },
    "test": {
      "cache": true
    },
    "typecheck": {
      "cache": true
    }
  },
  "namedInputs": {
    "default": ["{projectRoot}/**/*", "sharedGlobals"],
    "production": [
      "default",
      "!{projectRoot}/**/*.spec.*",
      "!{projectRoot}/jest.config.*"
    ],
    "sharedGlobals": []
  },
  "defaultBase": "main"
}

project.json для кожного проекту

Nx використовує project.json замість scripts у package.json:

// apps/web/project.json
{
  "name": "web",
  "sourceRoot": "apps/web/src",
  "projectType": "application",
  "targets": {
    "build": {
      "executor": "@nx/next:build",
      "outputs": ["{options.outputPath}"]
    },
    "serve": {
      "executor": "@nx/next:server"
    }
  },
  "tags": ["type:app", "scope:web"]
}

Tags й lint-правила для архітектурних обмежень

Сильна сторона Nx—enforce границь між модулями:

// .eslintrc.json
{
  "plugins": ["@nx"],
  "rules": {
    "@nx/enforce-module-boundaries": [
      "error",
      {
        "depConstraints": [
          {
            "sourceTag": "type:app",
            "onlyDependOnLibsWithTags": ["type:lib"]
          },
          {
            "sourceTag": "scope:web",
            "onlyDependOnLibsWithTags": ["scope:web", "scope:shared"]
          }
        ]
      }
    ]
  }
}

Граф залежностей

# Візуалізація у браузері
npx nx graph

# Вплинуте змінами у гілці
npx nx affected:graph

Запуск тільки вплинутих проектів

# Тести тільки для вплинутих
npx nx affected:test

# Збірка змін
npx nx affected:build --base=origin/main --head=HEAD

# Паралельно, максимум 4 завдання
npx nx affected:build --parallel=4

Генератори: стандартизація розробки

Nx дозволяє писати власні генератори—скрипти, що створюють файли за шаблонами.

Nx Cloud: розподілене виконання завдань

Розподіліть завдання між кількома CI-агентами:

# .github/workflows/ci.yml
jobs:
  agents:
    strategy:
      matrix:
        agent: [1, 2, 3]
    steps:
      - run: npx nx-cloud start-agent

  main:
    steps:
      - run: npx nx-cloud start-ci-run --distribute-on="3 linux-medium-js"
      - run: npx nx affected -t lint typecheck test build

Таймлайн

Налаштування Nx для 6–10 проектів—3–5 днів: workspace, плагіни, module boundaries, генератори, CI/CD. Міграція існуючого monorepo—1–1,5 тижня залежно від кастомних конфігів.