Система управления зависимостями Gradle хранит загруженные артефакты в локальном кэше Maven. Когда сборка запрашивает эту же зависимость снова, зависимость просто извлекается из кеша, избегая любой сетевой передачи артефакта.Кэширование NPM, аналогичное локальному кэшу Maven
Я пытаюсь воспроизвести это поведение с помощью NPM для создания проектов JavaScript. Я ожидал, что NPM будет поддерживать глобальный кеш node_modules, но установка пакета «глобально» в NPM имеет другое значение => пакет добавляется в PATH, чтобы он мог использоваться как инструмент CLI.
Чтение документации для npm install, стандартное поведение - установить пакеты в локальный каталог node_modules. Но это означало бы много дублированных пакетов в системе, теряющих ценное дисковое пространство. Это также создает проблему для создания чистых производственных сборок, так как в идеале node_modules следует сдувать каждый раз.
Поддерживает ли NPM что-то вроде кэширования Maven Gradle? Документация на NPM cache не дает понять, как это будет использоваться. Более того, неясно, безопасна ли стратегия кэширования с помощью NPM в нескольких параллельных сборках.
Это похоже на такое основное требование для занятых сред CI, которое должно быть разрешено ранее. Я нашел инструмент npm-cache, который, кажется, предлагает эту поддержку, но было бы намного лучше, если бы кеширование поддерживалось изначально в npm
.
Спасибо!
Это именно поведение этого кэша, который я пытаюсь понять. Например, чистая установка на моем компьютере создает каталог node_modules размером ~ 3 ГБ, но каталог кэша .npm составляет всего ~ 120 МБ. Так что здесь происходит? Является ли npm не кэшированием всего? Я не могу найти это поведение документированным или объясненным в любом месте. – Boon
Хотя NPM пытается дедуцировать зависимости, он не гарантирует полную дедупликацию. Таким образом, благодаря рекурсивному характеру вы можете получить больше копий одного и того же пакета в своем дереве зависимостей. И, следовательно, закончите с более крупной папкой 'node_modules', чем ваш кеш. – fmello
Сказав это, я согласен, что прыжок с 120 Мбайт до 3 ГБ кажется большим. Можете ли вы подтвердить, что ваша версия npm равна 3+? Я уезжаю от своего dev env на выходные. Но если вы разместите образец своего 'package.json', я был бы рад запустить образец для вас и сравнить результаты. – fmello