Cleaning house in Nx monorepo, how i removed unused deps safely
Автор успешно удалил около 120 неиспользуемых зависимостей в Nx-монополии, сократив время установки на минуту и уменьшив количество уязвимостей. Для этого он использовал инструмент Knip вместо устаревшего depcheck, так как он лучше работает с современными монополями и анализирует импорты и конфиги. Knip выдал список потенциально ненужных пакетов, но около 40% из них оказались ложными срабатываниями — например, зависимости использовались в скриптах, конфигах Jest или CSS.
Процесс включал удаление кандидатов, последующую проверку сборки, тестов и запуска приложений, а затем восстановление пакетов, которые оказались нужны, с добавлением их в ignore-лист Knip. Автор настроил конфиг под монополию, игнорируя специфичные для проектов ложные срабатывания. Изменения были мержены одной партией в тихое время с предварительным деплоем в preview-ветку для проверки. В будущем планируется интегрировать Knip в CI для предотвращения накопления мусора.
Комментарии (26)
- Обсуждаются причины накопления неиспользуемых зависимостей: невнимательность разработчиков, множественные рефакторинги, устаревшие библиотеки в монорепозиториях и автоматическое добавление пакетов без контроля.
- Участники отмечают, что инструменты вроде Knip помогают выявлять мертвые зависимости и файлы, но не оценивают качество кода, и окончательное решение остается за человеком.
- Экосистема и практики разработки (например,
pip freezeилиnpm installбез проверки) поощряют накопление лишних пакетов. - В больших и старых проектах, особенно с микросервисами и смешанными стеками, "хлам" накапливается быстро из-за миграций и отсутствия регулярной очистки.
- Некоторые видят в постоянной борьбе с кликбейтом и переименованиях заголовков раздражающий и непродуктивный аспект обсуждений.
Nx compromised: malware uses Claude code CLI to explore the filesystem 🔥 Горячее 💬 Длинная дискуссия
Критическая уязвимость в NX
NX (Nrwl) скомпрометирован: злоумышленники внедрили вредоносный код, крадущий кошельки и учётные данные.
- Что случилось: в пакетах
@nx/nx-linux-x64-gnu,@nx/nx-linux-x64-musl,@nx/nx-win32-x64-msvcобнаружен backdoor. - Как работает: при установке пакета запускается скрипт, который крадёт файлы
.env,wallet.dat,id_rsaи отправляет их на сервер злоумышленников. - Кто под угрозой: все, кто установил заражённые версии с 2024-06-01 по 2024-06-05.
- Что делать:
- Проверить версию NX:
nx --version. - Обновиться до последней версии (≥19.1.1).
- Проверить проект на наличие подозрительных скриптов в
node_modules/.bin. - Сменить все пароли и ключи, хранившиеся в проекте.
- Проверить версию NX:
Semgrep уже выпустил правило для обнаружения вредоносного кода:
semgrep --config=auto .
Комментарии (242)
- Компрометация npm-токена позволила злоумышленнику встроить вредоносный post-install-скрипт в популярные пакеты Nx.
- Скрипт проверяет наличие Claude Code / Gemini CLI и использует LLM для поиска секретов, обходя статический анализ.
- Участники советуют отключать npm-скрипты (
ignore-scripts true), использовать pnpm/bun, изолировать установку в контейнеры/VM и минимизировать зависимости. - Подчёркивается, что AI-агенты, запускаемые без песочницы, становятся мощным вектором атаки.
Malicious versions of Nx and some supporting plugins were published 🔥 Горячее 💬 Длинная дискуссия
Суть проблемы
В npm-реестр попали вредоносные версии пакетов Nx и связанных плагинов. Злоумышленники использовали временный доступ к npm-аккаунту @nxscope и опубликовали поддельные версии 19.8.0–19.8.2.
Затронутые пакеты
nx@nx/angular,@nx/cypress,@nx/detox,@nx/devkit,@nx/esbuild,@nx/eslint-plugin,@nx/expo,@nx/express,@nx/jest,@nx/js,@nx/nest,@nx/next,@nx/node,@nx/playwright,@nx/plugin,@nx/react,@nx/rollup,@nx/storybook,@nx/vite,@nx/web,@nx/webpack,@nx/workspace
Что делать
- Удалить вредоносные версии.
- Установить официальные 19.8.3 или выше.
- Проверить lock-файлы и CI на наличие подозрительных версий.
Комментарии (421)
- Уязвимость в пакетах Nx: токен npm скомпрометирован, злоумышленники внедрили вредоносный код через post-install скрипты.
- Малварь ищет Claude Code / Gemini CLI и использует их как «живые» инструменты для поиска криптокошельков, ключей и других секретов.
- Участники советуют отключать npm-скрипты (
ignore-scripts true), использовать Bun (по умолчанию не запускает скрипты), Verdaccio для вендоринга и инструмент vet для сканирования. - Рекомендуют разрабатывать в изолированных контейнерах/VM (cubbi, bubblewrap, firejail) и пересматривать каждую зависимость вместо «npm install наугад».
- Основной вывод: современные цепочки поставок и AI-агенты создают новый вектор атак «prompt-as-malware», а операционные системы всё ещё позволяют приложениям свободно читать весь диск.