an9eldust / packrat

Инструмент для ускорения установки пакетов из распространенных пакетных менеджеров

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

PackRat

Инструмент для ускорения установки пакетов из распространенных пакетных менеджеров (см. bower / npm).

Зачем это нужно?

Процесс установки пакетов из package.json или bower.json солидного размера занимает болезненно долгое время (речь может идти о нескольких минутах). В век Continuous Integration, когда из одного и того же файла декларации в день могут происходить десятки установок, это очень напрягает. Packrat позволит сократить время второй и последующих до минимального. Но сожрет много места на диске, и эту проблему нужно решать как-то самостоятельно (ниже вариант решения).

Как этим пользоваться?

  1. Нужно убедиться, что вы используете *nix-систему. Если это не так, надеюсь, вы не очень много времени потратили на чтение, увидимся в следующий раз.
  2. Нужно убедиться, что директория /opt/packrat существует, а текущему пользователю хватает прав, чтобы читать из нее и в нее писать (вот подробный ответ про то, как это правильно сделать). Если такой вариант неприемлем, см. секцию про конфиг.
  3. sudo npm install -g packrat@git://github.com/an9eldust/packrat.git
  4. cd %директория_с_package.json_или_bower.json%
  5. packrat npm install / packrat bower install
  6. Следующая установка из этого же package.json или bower.json должна пройти заметно быстрее.

Как это работает?

  1. При установке пакетов packrat проверяет, нет ли в его хранилище (по умолчанию /opt/packrat/%packageManager%/%hash%, настраивается в конфиге) кэша, соответствующего файлу декларации пакетов (package.json / bower.json).
  2. Если в хранилище ничего нет:
    • Производится стандартная установка (командой, взятой опять же из конфига).
    • Директория с только что установленнными пакетами пакуется в архив, который копируется в хранилище.
  3. Если в хранилище лежит архив: packrat решает, что это и есть кэш, и распаковывает его на место локальной директории с пакетами. Естественно, это гораздо быстрее, чем честная установка. Вот для чего мы тут собрались!
  4. Если в хранилище лежит временный файл: это значит, что параллельно идет другая packrat-установка с теми же параметрами из точно такого же файла декларации. Эта установка началась раньше и в конце сложит свои результаты в кэш. Packrat ее ждать не будет и установит пакеты так, как если бы в хранилище ничего не было, но не будет ничего копировать в конце.

Команды и опции (на примере npm)

install

packrat npm install — запускает полный цикл установки npm-пакетов по алгоритму из предыдущего раздела.

packrat npm install --force — перед обычной установкой удалит кэш и локальную node_modules. Может пригодиться, если в вашем package.json есть нестрогие зависимости, и нужно поставить самые свежие версии, которые по этим зависимостям резолвятся. Очевидно, что включение этой опции время не экономит.

packrat npm install --info — выведет в конце установки немного полезной информации.

export

packrat npm export — перекладывает то, что лежит в локальной node_modules, в кэш. Может пригодиться, если вы убеждены, что в кэше лежит что-то неактуальное, а в локальной node_modules, напротив, только что установлен самый свежак. Но нужно учитывать, что эта команда удалит из кэша лог установки и сбросит показатели статистики.

import

packrat npm import — перекладывает то, что лежит в кэше, в локальную node_modules.

clean

packrat npm clean — очищает кэш для текущей конфигурации и текущего package.json (или другого файла, см. конфиг).

info

packrat npm info — выдает немного информации по текущей конфигурации. Вроде такой:

Storage path: /opt/packrat/npm/bb6f3f75d393d8ad428b5e41d483ccf4
Storage status: READY
Installation time: 57 sec
Times storage was imported: 5
Mean import time: 1 sec
Mean shaved time: 4 min, 39 sec
Install command: `npm install`
Local packages directory: node_modules
Package declaration file: package.json

Можно только порадоваться своей экономичности.

Storage status'ы бывают такие (см. как это все работает):

  1. READY — кэш готов к использованию
  2. EMPTY — кэша пока нет
  3. PROGRESS — идет параллельная установка, кэш скоро появится

--verbose

packrat npm install --verbose — сделает packrat еще более разговорчивым.

Как это настраивать

По умолчанию packrat использует такой конфиг. Конфиг может быть переопределен файлом .packratrc, имеющим аналогичный формат и лежащим в директории запуска. Ключи на верхнем уровне — пакетные менеджеры, а внутри у них следующие настройки.

storageRoot

Путь на файловой системе к корню хранилища для этого менеджера.

installCommand

Команда, которой менеджер устанавливает пакеты в обычном режиме. Например, для bower часто актуальна опция --allow-root — здесь самое место для ее размещения.

sourceFile

Имя файла-декларации зависимостей, который должен лежать в той директории, из которой будет запускаться packrat. Если вы используете npm-shrinkwrap.json — с этим сюда.

directory

Имя локальной директории, в которую пакетный менеджер установит зависимости. Ситуацию, когда придется здесь перенастраивать что-то для npm, представить трудно, но для bower это может быть полезно.

Инвалидация кэша

Если дать packrat волю, он довольно быстро сожрет все имеющееся на диске место: ваши зависимости время от времени меняются, но автоматически удалять старые кэши никто не будет. Примерно так find /opt/packrat/ -name 'import.counter' -ctime +7 -exec dirname {} \; (с точностью до реального расположения кэшей) можно найти старый хлам, к которому уже неделю никто не обращался. Добавив в конец команды | xargs rm -rf можно этот хлам удалить, а можно даже выполнять всю команду по крону раз в сутки.

About

Инструмент для ускорения установки пакетов из распространенных пакетных менеджеров


Languages

Language:JavaScript 100.0%