Веб-пакет 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 (а не исходного файла). Таким образом, пока мы не найдем другое возможное решение, мы можем использовать некоторые соглашения о названиях ваших тестовых наборов, чтобы увеличить понимание - в каком файле наш тест был неудачным.

введите описание изображения здесь