21

在最近发布了 webpack 1.14.0 / karma 1.4.0 / karma-webpack 2.2.0 之后,当 karma 开始构建 webpack 时,我现在看到了很多这样的消息。

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 typescript@2.1.5 and C:\git\project\tsconfig.json

到目前为止,它并没有阻止我的构建,但至少现在似乎有些东西正在锁定,即使是暂时的。还有人看到这个吗?如果这是我的问题,我想清理它,但正如我所说,我的配置文件没有改变,但现在这已经出现在最近来自 karma/webpack 产品系列的大量发布中过去 3 周。

我的问题是:

  1. 这条消息是什么意思?
  2. 可以做些什么来解决创建它们的问题?
4

3 回答 3

19

karma-webpack 将每个单独的规范文件视为单独的入口点,并为每个入口点生成单独的 webpack 包。因此,您的控制台日志很好,不表示任何问题。

如果你想摆脱多个webpack: wait until bundle finished:输出,你可以在你的 karma 配置中禁用 webpack-dev-middleware 信息日志:

...

webpackMiddleware: {
  noInfo: true
},

...

在webpack-dev-middleware包的自述文件中阅读有关 webpackMiddleware 部分可能选项的完整列表的更多信息。

于 2017-03-15T07:04:20.813 回答
11

好的。使用这个,看起来我找到了解决方案。

在我的情况下,问题存在于多个文件中,包括 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 编译。它提高了项目测试过程和电脑资源的速度。

希望能帮助到你。此致。

PS 有一个带有报告的屏幕截图,以证明每个测试套件都通过 karma-spec-reporter 显示为不同的组 测试报告

这里仅演示了测试用例中的一个捆绑过程。 一个捆绑过程

更新 2:在此解决方案中,在测试失败的情况下调试存在一些问题,因为我们将在报告中看到我们的testEntry文件(不是原始文件)的行号。因此,在我们找到其他可能的解决方案之前,我们可以使用您的测试套件的一些命名约定来增加理解——在哪个文件中我们的测试失败了。

在此处输入图像描述

于 2017-03-13T08:17:22.557 回答
2

在检查了webpack-dev-middleware 的选项后,我发现你可以通过在你的(在记者部分karma.conf.js的正下方)中指定以下内容来摆脱“「wdm」:等待捆绑完成:noop”输出:

webpackMiddleware: {
  logLevel: 'error'
}

经测试:

  • 业力 3.1.1
  • 业力 webpack 3.0.5
于 2018-11-29T16:00:37.913 回答