npm package: @lad-tech/nsc-fast-install
Description: Fast dependencies install for builds docker images of monorepo
Author: DevHive crew
Latest version: 1.16.3

# 📦 `@lad-tech/nsc-fast-install`
[![NPM](https://nodei.co/npm/@lad-tech/nsc-fast-install.png)](https://nodei.co/npm/@lad-tech/nsc-fast-install/)
> ⚡️ Быстрая установка **только нужных зависимостей** при сборке микросервисов из большого **моно-репозитория**

---

## ❓ Зачем это нужно

В монорепозиториях:

- Все зависимости обычно указываются в **корневом `package.json`**;
- У сервисов нет своих `node_modules`;
- Это удобно для разработки, но **неэффективно для сборки контейнеров**.

### 🔥 Проблема

При `COPY node_modules` в Docker попадают **все зависимости**, даже если сервис использует только малую часть.

📦 Это:

- Увеличивает размер образов;
- Замедляет сборку;
- Усложняет отслеживание неиспользуемых пакетов.

---

## 💡 Решение

`nsc-fast-install`:

- Работает **после сборки TS → JS**;
- Анализирует `start.js` и все `require()/import`;
- Выявляет **реально используемые** зависимости;
- Копирует только нужные пакеты в `dist/node_modules`.

---

## 🚀 Установка

```bash
npm i @lad-tech/nsc-fast-install -D
```

---

## 🛠 Использование

```bash
# указываем точку входа
npx nsc-fast-install --entryPoint services/AuthService/start.ts

# или указываем папку сервиса (ищет main из package.json)
npx nsc-fast-install --service services/AuthService
```

---

## 📌 Пояснение про entryPoint и main

| Способ            | Как работает                                                                 |
|-------------------|------------------------------------------------------------------------------|
| `--entryPoint`    | Путь до исходного TS-файла (`start.ts`)                                      |
| `--service`       | Указывает папку, внутри которой будет найдён `main` в `package.json`         |
| `main`            | Должен вести на `dist/.../start.js` — **собранный JS-файл**, не `.ts`        |
| ❗️Важно           | Анализ производится **по JS**, а не по TypeScript-коду                       |

### Пример:

```jsonc
// services/AuthService/package.json
{
  "main": "dist/AuthService/start.js"
}
```

---

## ⚠️ Возможные дефекты

1. ❌ **Вы указали `.ts`, но не собрали проект**

   > Ошибка: `outDir не найден` или `start.js не существует`

   ✅ Решение: выполните `tsc` или `npm run build` перед вызовом

2. ❌ **`main` отсутствует или указывает на несуществующий файл**

   ✅ Решение: добавьте `main` в `package.json` сервиса или используйте `--entryPoint`

3. ❌ **Некорректные импорты (например, с ошибками в RegExp)**

   ✅ Убедитесь, что транспиляция прошла успешно и код валиден (analyze выполняется Babel'ом)

---

## 🔧 Опции CLI

| Флаг                 | Тип      | Описание                                                                 |
|----------------------|----------|--------------------------------------------------------------------------|
| `--entryPoint`       | `string` | Путь до `start.ts`                                                      |
| `--service`          | `string` | Путь до папки сервиса                                                   |
| `--output`           | `string` | Папка назначения `node_modules` (по умолчанию — `dist/`)                |
| `--exclude`          | `string` | Исключить сервисы, через `,`                                            |
| `--tsconfig`         | `string` | Имя `tsconfig.json`                                                     |
| `--verbose`          | `boolean`| Расширенный лог                                                         |
| `--dryRun`           | `boolean`| Не копировать, только показать                                          |