Хаю-хай
Хочу командами типа yarn/npm install устанавливать отдельные пачки пакетов
типа:
dev - только пакеты для разработки
test - только пакеты для тестов (karma и все сопуствующие пакеты)
prod - все пакеты
Кто-то чем-то подобным занимался?
Хаю-хай
Хочу командами типа yarn/npm install устанавливать отдельные пачки пакетов
типа:
dev - только пакеты для разработки
test - только пакеты для тестов (karma и все сопуствующие пакеты)
prod - все пакеты
Кто-то чем-то подобным занимался?
Подобная механика уже встроена в то как описываются зависимости.
npm install --production
установит только зависимости из секции "dependencies"
package.json
.
npm install
установит завсимости и из "dependencies"
и из devDependencies
файла package.json
При добавлении зависимости можно указать в какую из секций "dependencies"
или "devDependencies"
она будет записана. npm install karma --save-dev
запишет зависимость в devDependencies
, npm install express --save
запишет в "dependencies"
Тут можно почитать больше обсуждения на английском.
Могу из “dependencies” установить все для прод версии билда
И из “devDependencies” я установлю вообще все используемые пакеты в проекте, типа для разработки
А как мне установить только пакеты для тестов?
По логике разработчиков зависимости тестов описаны в devDependencies
, код который они тестируют зависит от dependencies
. Поэтому для запуска тестов нужны зависимости и из dependencies
и devDependencies
. Не бывает случаев установки зависимостей только для тестов потому что тестируемый код зависит от dependencies
.
В моем случае в карма конфиг передается уже сбилженый бандл проекта на angularjs
И я предполагал, что для корректной работы тестов им не нужны зависимости остального проекта
Идея была такова:
Бандл, как я предполагаю, будет собираться прямо перед запуском тестов. Иначе придется городить систему которая будет гарантировать что тесты тестируют код со всеми недавними изменениями, а не тестируют старый бандл.
Или сетап выглядит иначе?
Бандл собирается прямо перед тестами, и тесты строго на нужном бандле.
Это все таски для тимсити, пытаюсь уменьшить время билдов
Сначала будут прогоняться все билды, тоже по отдельности(фронт, бек), а затем так же опционально можно прогнать тесты. Но время прогонки тестов нужно копировать всю папку нодмодулей из первого шага, а это занимает время
Получается нужны зависимости как для тестов так и для бандла. Если, конечно, в промежутке между сборкой и тестированием не сбрасывается окружение.
Попробуй кешировать устанавливаемые пакеты вместо разделения их установки. Просто использования yarn
достаточно ибо он кеширует установленные пакеты на глобальном уровне. А чтобы билды не падали если нет доступа к npm.org
, добавь возможность работы offline для yarn
Так для бандла уже не нужны никакие пакеты, они же уже все там внутри запаяны импортами
Я понял что бандл собирается в той же папке, в которой запускаются тесты и эти процессы - части одной таски тимсити. Т.е. процесс выглядит так:
Второе и самое главное - самое дорогое в установке пакетов - это http запросы к серверу и выкачивание пакетов. Если пакеты закешированы, то установка зависимостей проходит намного быстрее. Если в проекте зависимости уже закешированы, то разделение зависимостей для test и prod не даст ощутимой выгоды производительности.
Я не хочу решать задачу установки разных наборов пакетов потому что она нестандартна для экосистемы npm, как следствие решение будет плохо встраиваться в ожидания других частей системы.
А устанавливать пакеты всегда и кешировать их - лучший баланс между получаемым ускорением и простотой решения.
Поправь где я ошибаюсь, какие реальные шаги сборки
В разных папках, но артефакт и источник один и тот же
т.е. в результате билда получается артефакт, который используется на следующем шаге сборки - тестировании? И это происходит в одной папке на одной машине?
Я ошибся, ты выше писал что в разных.
В целом я считаю что задачу нужно решать через настройку кеширования пакетов. Может у ребят будет альтернативное мнение/идея.