2016-08-25 4 views
8

Я создаю интерфейс HTML5 с использованием инструментов на основе NPM (grunt).NPM Рекомендации по непрерывной интеграции

Одним из первых шагов моего процесса непрерывной интеграции является запуск npm install.

npm install является SLOW. Даже с локальными артефактами кэширования прокси-сервера NPM (Nexus 3 Sonatype), он все еще занимает 4 минуты!

$> time npm install 
real 4m17.427s 
user 0m0.170s 
sys  0m0.290s 

Если я следую за свои обычные лучшие практиками для непрерывной интеграции, я хотел бы начать с первозданным хранилищем SCM и запустить сборку. Это означает, что каждый раз, когда сборка CI должна будет сделать новый npm install и взять на себя расходы в течение 4 минут.

Это Значительное доля моего времени сборки. Я недовольна тем, что сборка занимает очень много времени.


альтернатива, кажется, чтобы держать node_modules вокруг между сборками. Однако у меня были проблемы с тем, что сборка стала нестабильной.

Извлечение зависимостей от package.json не снимает их с node_modules с помощью простого npm install. Я могу обойти это с помощью npm prune.

Что считается лучшей практикой здесь?

+0

Какую версию npm вы используете? npm 5 хранит [локальный кеш пакетов] (https://docs.npmjs.com/cli/cache). – msanford

ответ

1

Учитывая, что для сборки вы должны установить новые пакеты, у вас нет выбора, кроме как позвонить в установку. Что касается нетронутых, я твердо верю, что они относятся к процессу «сборки», а не к процессу «управления зависимостями».

Почему они разные? Давайте рассмотрим пример, чтобы сделать его более очевидным.

Как разработчик, при первом запуске своей работы вы ДОЛЖНЫ «установить» программные средства, которые позволят кодировать. Обычно это делается один раз. После этого вы можете начать кодирование. Более поздняя часть «build» , поскольку вы генерируете значение для каждой функции, создаваемой вашим кодом. От время от времени вы можете обновить список инструментов, удалив, добавив или обновив его.

В этом примере, устанавливая инструменты каждый день, когда вы приступаете к работе, прежде чем начинать кодирование будет ад.

Я предлагаю вам убедиться, что процесс сборки, что означает создание артефакта (например, Jar, например), отделен от процесса установки зависимостей. Это означает, что установка выполняется один раз, и строительство может продолжаться без проблем. Вы не упоминаете, что будет построено, но хрюканье может позаботиться об остальном наверняка.

Следовательно, я считаю, что обрезка и установка - хорошая стратегия. Вы не должны волноваться за кулачные времена. Подумайте об этом как о холодном старте. Любая система, реализованная с субкомпонентами, работающими вместе как конвейер, имеет эту «проблему». Возьмите автомобиль, например. Это будет не так эффективно, когда вы начнете его, как когда вы его проедете через час.

0

Запланируйте ежедневную работу по созданию контейнера докеров с вашими зависимостями. Запустите свой CI-задание в последнем контейнере. Артефакт создания задания CI.

0

Вы должны установить npm пакетов в автономном режиме в локальной машине или в локальной сети, вы можете нашли несколько советов здесь =>Offline installation of npm packages

0

считается Вы используете npm link или даже символическую ссылку всю папку node_modules? По крайней мере, ссылка npm может быть использована для ваших зависимостей dev, которые вы обычно хотите контролировать на сервере в любом случае. Это должно ускорить процесс.

Смежные вопросы