Karma webpack输出多个"webpack:等到捆绑完成"

Kim*_*tes 20 karma-runner karma-jasmine webpack karma-webpack

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

webpack: wait until bundle finished:
Run Code Online (Sandbox Code Playgroud)

有时我看到多达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
Run Code Online (Sandbox Code Playgroud)

到目前为止,它还没有阻止我的构建,但至少它似乎现在已经锁定,即使是暂时的.其他人看到这个?如果它是我的结果,我想要清理它,但正如我所说,我的配置文件没有改变,但现在已经出现了最近发布的karma/webpack系列产品过去3周.

我的问题是:

  1. 这条消息是什么意思?
  2. 如何解决创建它们的问题?

dan*_*dan 18

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

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

...

webpackMiddleware: {
  noInfo: true
},

...
Run Code Online (Sandbox Code Playgroud)

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


Vel*_*dan 11

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

在我的情况下,问题在多个文件中,包括在Karma.conf中

在我有这个文件配置之前

files: [
            src/**/*.spec.js'
        ],
        preprocessors: {
            'src/**/*.spec.js': ['webpack']
        },
Run Code Online (Sandbox Code Playgroud)

看起来像karma为包含的每个文件启动一个webpack编译,它需要一个内存(在测试之前保留一个编译的文件).这就是为什么我们有内存泄漏和资源/时间问题.

所以我通过这个改变解决了这个问题:我在我的应用程序根目录中创建了一个testEntry文件(我希望Karma只能使用它,并且它只会触发webpack编译一次,对于这个文件)它的工作方式与我完全一样预期:)

files: [
            'src/__testsEntry__.spec.js'
        ],
Run Code Online (Sandbox Code Playgroud)

在这个文件中,我需要通过这种结构进行所有测试

const req = require.context("./", true, /.+.spec.js/igm);
req.keys().forEach(function(key) {
    req(key);
});
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题,现在我只有一个文件的webpack编译.它提高了项目测试过程和pc资源的速度.

希望能帮助到你.最好的祝福.

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

以下是测试用例中仅一个捆绑过程的演示. 一个捆绑过程

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

在此输入图像描述