Зачем все это или «А что, так можно было?»

Использую node.js и php в разработке. А это означает, что постоянно приходится скачивать пакеты (npm, composer). И речь не только об объеме трафика, который каждый раз нужно гонять по сети, но и времени ожидания загрузки, синхронизации пакетов между рабочей станцией и ноутбуком. Ещё о том, что делать, когда интернет неожиданно заканчивается или оказываешься там, где его совсем нет или скорость оставляет желать лучшего.

Давно искал решение, умеющее локально кэшировать пакеты, чтобы не нужно было их каждый раз скачивать, с поддержкой работы без интернета и для него не приходилось бы разворачивать отдельную инфраструктуру и поднимать базу данных. Что-то компактное и удобное. В идеале такое, чтобы можно было легко переносить с одной машины на другую и работать оно должно под разными ОС (как минимум, Windows и Linux). Естественно бесплатным и универсальным, а не только под пакеты npm или composer.

Какие есть альтернативные варианты

Для npm пакетов:

  • локальный кэш самого пакетного менеджера npm;

  • pnpn и его система локального кэширования и ссылок на уже загруженные пакеты;

  • local-npm — хорошая система, но очень давно не обновляется;

  • Как там его Ver… Verda… — ну вы поняли…

Для php пакетов (Composer)

— Satis и варианты на его основе

Возможно есть что-то еще, но основной упор делался на node. js разработку.

Все вышеперечисленные решения работают и в какой-то мере закрывают (частично) «хотелки», поднятые в начале статьи. Но лишь частично: либо решение сугубо для одного компьютера, либо оно не работает без интернета, либо устаревшее, либо нет гибкой настройки, либо есть какие-то другие причины его не использовать.

Local Package Cache (pkg-cache)

Данный проект попал в мое поле зрения случайно, когда я в очередной раз что-то искал на Гитхабе. Сначала все перечисленное в описании проекта звучало уж слишком не правдоподобным: компактный, решение сугубо на node.js и скриптах (bash) да еще и для трех различных пакетных менеджеров, закрывая вопросы кэширования пакетов при разработке на javascript (node.js, npm), php (composer) и python (pip), (особенно учитывая столь малый размер проекта по сравнению с конкурентами), так что сразу захотелось этот pkg-cache протестировать.

Первая небольшая проблемка возникла сразу — исходный код в проекте был под Linux и MacOS, а у меня ноут был с детищем компании Microsoft. Поскольку проект на node. js, было решено — портируем. Можно, конечно, было использовать подсистему WSL, но добавить нативную реализацию для еще одной платформы звучало, как хороший план.

Вторая проблемка не заставила себя ждать. Она была до боли простой: проект запускался, но… не работал так как нужно. Пакеты не кэшировались, часть информации просто исчезала, структура записи не отрабатывала верно. Возможно, проблема была не в коде проекта. Просто там где он изначально тестировался не было никаких ограничений. А вот мой провайдер славится такими. Поэтому пришлось опять лезть в код и заниматься правками.

А как же без LLM/AI?

В последнее время встретить на Хабре статью, в которой не упоминается AI большая редкость, поэтому, чтобы данный документ не затерялся на фоне таких публикаций, добавлю краткий абзац про использование таких технологий здесь. Сложно, конечно, представить как можно использовать его здесь, но оказалось, что можно.

На фоне общего хайпа с вайбкодингом, уже несколько месяцев весьма успешно (по моим меркам) применяю связку opencode + skills + MCP/LSP + DeepSeek V4 (в вариантах Flash и Pro в зависимости от сложности проекта). И вот такой комбинации хватило для завершения трех разных проектов (этот не учитывается) до стадии готовности к продакшену. Но это тема для отдельной статьи.

Здесь же данная комбинация технологий прекрасно помогла в тестировании и оптимизации процесса. А также в добавлении нового функционала, который мне был необходим.

Текущий статус проекта

В текущей версии моего форка проекта pkg-cache (доступного по ссылке на GitFlic) реализован следующий функционал:

  • нативная поддержка в ОС Windows 10×64 (используется node.js версии 24.11.0) + nssm v2.25 для запуска сервиса (сайт оригинального проекта давно не обновлялся, поэтому использую вот этот форк: NSSM;

  • корректная работа с пакетами npm, composer, pip;

  • работа с пакетами в режиме offline (без интернета, только для тех пакетов, которые были скачены ранее);

  • для npm пакетов можно задать адрес сайта registry;

  • подправлены скрипты для Linux (bash) — базовое тестирование выполнено в Alt Linux;

  • добавлена документация по проекту, вариантам настроек на русском языке;

  • более месяца успешно использую проект у себя.

Чего не хватает

Данный проект ориентирован в первую очередь на использование индивидуальными разработчиками. Он обеспечивает базовый функционал, но для развертывания в больших командах он, наверное, все же слабоват. В нем нет поддержки интерфейса для работы с загруженными в кэш пакетами (для себя сделал простенький проект pkg-cache-gui, но он пока не готов к публичному тестированию), нет поддержки механизма публикации пакетов, значительную часть настройки приходится делать руками, но это все плата за компактный размер и простоту реализации.

Пример использования

Как я говорил выше, проект успешно используется у меня, при разработке. Ниже примеры вывода при работе с проектом:

PS C:\Tools>pkg-cache.cmd status
Proxy: running at http://127.0.0.1:4873
Cache root: F:\.local-package-cache
Last update: Jul 2, 2026, 05:09 PM
Disk usage: 1.8 GB
Total packages: 2837

Per package manager:
Composer: 47.4 MB, 1 packages, last update Jun 6, 2026, 05:55 PM
Node/npm: 1.8 GB, 2832 packages, last update Jul 2, 2026, 05:09 PM
Python: 2.5 MB, 4 packages, last update Jun 11, 2026, 07:30 PM
PS C:\Tools>

Базовую информацию о пакетах и версиях в кэше можно получить, добавив ключ —verbose (показан вывод только первой станицы текста — в текущей базе 2832 пакета npm !!!):

PS C:\Tools>pkg-cache.cmd status —verbose
Proxy: running at http://127.0.0.1:4873
Cache root: F:\.local-package-cache
Last update: Jul 2, 2026, 05:09 PM
Disk usage: 1.8 GB
Total packages: 2837

Per package manager:
Composer: 47.4 MB, 1 packages, last update Jun 6, 2026, 05:55 PM
Node/npm: 1.8 GB, 2832 packages, last update Jul 2, 2026, 05:09 PM
Python: 2.5 MB, 4 packages, last update Jun 11, 2026, 07:30 PM

Cached packages (name @ version):

Composer:
pestphp/pest @ 236

Node/npm:
abbrev @ 2.0.0
accepts @ 1.3.8
acorn @ 8.11.3
acorn @ 8.16.0
acorn @ 8.17.0
acorn-import-assertions @ 1.9.0
acorn-import-phases @ 1.0.4
acorn-jsx @ 5.3.2
ajv @ 6.10.0
ajv @ 6.12.6
ajv @ 6.15.0
ajv @ 8.13.0
ajv @ 8.20.0
ajv-formats @ 2.1.1
ajv-keywords @ 3.5.2
ajv-keywords @ 5.1.0
alien-signals @ 1.0.13
ansi-align @ 2.0.0
ansi-colors @ 1.1.0
ansi-colors @ 4.1.3
ansi-escapes @ 4.3.2
ansi-escapes @ 6.2.1
ansi-gray @ 0.1.1
ansi-html-community @ 0.0.8
ansi-regex @ 2.1.1
ansi-regex @ 3.0.0
ansi-regex @ 5.0.1
ansi-regex @ 6.0.1...

При запуске без опций — система выведет возможные варианты:

PS C:\Tools>pkg-cache.cmd
Usage: pkg-cache setup | setup-project [path] | teardown-project [path] | populate [paths] | launchagent install|uninstall | status [—verbose] | stop | cleanup [—annihilate]
PS C:\Tools>

Пример настройки службы в NSSM:

Настройка службы NSSM
Настройка службы NSSM

Вместо послесловия:

Выражаю благодарность автору (Erik Gratz) оригинального пакета pkg-cache, доступного на Гитхабе. Без его решения не появился бы и этот форк. Надеюсь, что информация в статье окажется полезной, и вы, возможно, попробуете применить это решение. Пишите, если есть предложения или пожелания к дальнейшему развитию проекта.

Комментарии (0)