📦 @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
.
🚀 Установка
npm i @lad-tech/nsc-fast-install -D
🛠 Использование
npx nsc-fast-install --entryPoint services/AuthService/start.ts
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-коду |
Пример:
// services/AuthService/package.json
{
"main": "dist/AuthService/start.js"
}
⚠️ Возможные дефекты
-
❌ Вы указали .ts
, но не собрали проект
Ошибка: outDir не найден
или start.js не существует
✅ Решение: выполните tsc
или npm run build
перед вызовом
-
❌ main
отсутствует или указывает на несуществующий файл
✅ Решение: добавьте main
в package.json
сервиса или используйте --entryPoint
-
❌ Некорректные импорты (например, с ошибками в 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 | Не копировать, только показать |