Веб-пакет Karma, выводящий несколько "веб-пакетов: дождитесь завершения пакета"
После недавних выпусков webpack 1.14.0/karma 1.4.0/karma-webpack 2.2.0, я теперь вижу много таких сообщений, когда карма начинает сборку своего веб-пакета.
webpack: wait until bundle finished:
Иногда я вижу целых 6-8 из них, и они, похоже, делают сборку дольше. Например, это:
Hash: 255562a2a96fffe34fae
Version: webpack 1.14.0
Time: 408ms
webpack: bundle is now VALID.
webpack: bundle is now INVALID.
webpack: wait until bundle finished:
webpack: wait until bundle finished:
webpack: wait until bundle finished:
webpack: wait until bundle finished:
webpack: wait until bundle finished:
webpack: wait until bundle finished:
ts-loader: Using [email protected] and C:\git\project\tsconfig.json
Пока это не остановило мою сборку, но по крайней мере кажется, что что-то теперь блокируется, если даже временно. Кто-нибудь еще видел это? Я хотел бы очистить это, если это что-то на моем конце, но, как я уже сказал, мои конфигурационные файлы не изменились, но теперь это появилось с недавним потоком выпусков из семейства продуктов karma/webpack в последние 3 недели.
Мои вопросы:
- Что означает это сообщение?
- Что можно сделать, чтобы исправить возникшую проблему?
Ответы
Ответ 1
karma-webpack рассматривает каждый отдельный файл спецификации как отдельную точку входа и создает отдельный пакет веб-пакетов для каждого. Таким образом, ваши консольные журналы просто прекрасны и не указывают на какие-либо проблемы.
Если вы хотите избавиться от нескольких выходов webpack: wait until bundle finished:
, вы можете отключить ведение журнала webpack-dev-middleware в конфигурации вашей кармы:
...
webpackMiddleware: {
noInfo: true
},
...
Подробнее о полном списке возможных вариантов раздела webpackMiddleware в файле webpack-dev-middleware.
Ответ 2
Хорошо. Работал с этим и выглядел так, как будто нашел решение.
В моем случае проблемы были в нескольких файлах, включая Karma.conf
Прежде чем у меня была конфигурация этих файлов
files: [
src/**/*.spec.js'
],
preprocessors: {
'src/**/*.spec.js': ['webpack']
},
выглядит как karma запускает сборку webpack для каждого файла, который был включен, и он берет память (чтобы сохранить скомпилированную заявку перед тестами). Поэтому у нас есть утечка памяти и проблема ресурсов/времени.
Поэтому я решил эту проблему этими изменениями:
Я создал один файл testEntry в корне моего приложения (я ожидаю, что Karma будет работать только с ним, и он будет запускать сборку webpack только один раз для этого файла), и он работает точно так, как я ожидал:)
files: [
'src/__testsEntry__.spec.js'
],
В этом файле мне потребовались все тесты с помощью этой конструкции
const req = require.context("./", true, /.+.spec.js/igm);
req.keys().forEach(function(key) {
req(key);
});
Это разрешило мою проблему, и теперь у меня есть только одна сборка webpack для одного файла. Это увеличило скорость процесса тестирования проекта и ресурсов ПК.
Надеюсь, это поможет.
С наилучшими пожеланиями.
P.S. Существует скриншот с отчетом, чтобы продемонстрировать, что каждый набор тестов показал себя как другая группа через карма-спек-репортер
![тестовый отчет]()
Вот демонстрация только одного процесса связывания в тестовом случае.
![один процесс связывания]()
Обновление 2: в этом решении существует некоторая проблема с отладкой в случае отказа теста,
потому что в отчете будет показан номер строки нашего файла testEntry (а не исходного файла). Таким образом, пока мы не найдем другое возможное решение, мы можем использовать некоторые соглашения о названиях ваших тестовых наборов, чтобы увеличить понимание - в каком файле наш тест был неудачным.
![введите описание изображения здесь]()