Karma webpack 输出多个 "webpack: wait until bundle finished"
Karma webpack outputting multiple "webpack: wait until bundle finished"
在最近发布 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 周内。
我的问题是:
- 这条消息是什么意思?
- 如何解决创建它们的问题?
好的。解决这个问题,看起来我找到了解决方案。
在我的案例中,问题出现在多个文件中,包括 Karma.conf
在我有这个文件配置之前
files: [
src/**/*.spec.js'
],
preprocessors: {
'src/**/*.spec.js': ['webpack']
},
看起来 karma 为包含的每个文件启动了一个 webpack 编译,它需要一个内存(在测试之前保存一个编译的文件)。这就是我们有内存泄漏和 resource/time 问题的原因。
所以我通过以下更改解决了这个问题:
我在我的应用程序根目录中创建了一个 testEntry 文件(我希望 Karma 将只使用它并且它只会触发一次 webpack 编译,对于这个文件)并且它的工作方式完全符合我的预期:)
files: [
'src/__testsEntry__.spec.js'
],
在此文件中,我要求通过此构造进行所有测试
const req = require.context("./", true, /.+.spec.js/igm);
req.keys().forEach(function(key) {
req(key);
});
这解决了我的问题,现在我只有一个文件的 webpack 编译。它提高了项目测试过程和 PC 资源的速度。
希望对您有所帮助。
最好的问候。
P.S。有一个带有报告的屏幕截图,以证明每个测试套件通过 karma-spec-reporter 显示为不同的组
这里只演示测试用例中的一个打包过程。
更新 2:在这个解决方案中,在测试失败的情况下调试存在一些问题,
因为我们会在报告中看到 testEntry 文件(不是原始文件)的行号。因此,在我们找到其他可能的解决方案之前,我们可以使用您的测试套件的一些命名约定来增加理解 - 我们的测试在哪个文件中失败了。
karma-webpack 将每个单独的规范文件视为单独的入口点,并为每个文件生成一个单独的 webpack 包。因此,您的控制台日志很好,没有表明任何问题。
如果你想摆脱多个 webpack: wait until bundle finished:
输出,你可以在你的 karma 配置中禁用 webpack-dev-middleware 信息日志:
...
webpackMiddleware: {
noInfo: true
},
...
在 webpack-dev-middleware 包的自述文件中阅读有关 webpackMiddleware 部分可能选项的完整列表的更多信息。
检查 options of webpack-dev-middleware, I found out that you can get rid of the "「wdm」: wait until bundle finished: noop" output by specifying the following in your karma.conf.js
(right below the reporters 部分后):
webpackMiddleware: {
logLevel: 'error'
}
测试:
- 业力 3.1.1
- 因果网络包 3.0.5
在最近发布 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 周内。
我的问题是:
- 这条消息是什么意思?
- 如何解决创建它们的问题?
好的。解决这个问题,看起来我找到了解决方案。
在我的案例中,问题出现在多个文件中,包括 Karma.conf
在我有这个文件配置之前
files: [
src/**/*.spec.js'
],
preprocessors: {
'src/**/*.spec.js': ['webpack']
},
看起来 karma 为包含的每个文件启动了一个 webpack 编译,它需要一个内存(在测试之前保存一个编译的文件)。这就是我们有内存泄漏和 resource/time 问题的原因。
所以我通过以下更改解决了这个问题: 我在我的应用程序根目录中创建了一个 testEntry 文件(我希望 Karma 将只使用它并且它只会触发一次 webpack 编译,对于这个文件)并且它的工作方式完全符合我的预期:)
files: [
'src/__testsEntry__.spec.js'
],
在此文件中,我要求通过此构造进行所有测试
const req = require.context("./", true, /.+.spec.js/igm);
req.keys().forEach(function(key) {
req(key);
});
这解决了我的问题,现在我只有一个文件的 webpack 编译。它提高了项目测试过程和 PC 资源的速度。
希望对您有所帮助。 最好的问候。
P.S。有一个带有报告的屏幕截图,以证明每个测试套件通过 karma-spec-reporter 显示为不同的组
这里只演示测试用例中的一个打包过程。
更新 2:在这个解决方案中,在测试失败的情况下调试存在一些问题, 因为我们会在报告中看到 testEntry 文件(不是原始文件)的行号。因此,在我们找到其他可能的解决方案之前,我们可以使用您的测试套件的一些命名约定来增加理解 - 我们的测试在哪个文件中失败了。
karma-webpack 将每个单独的规范文件视为单独的入口点,并为每个文件生成一个单独的 webpack 包。因此,您的控制台日志很好,没有表明任何问题。
如果你想摆脱多个 webpack: wait until bundle finished:
输出,你可以在你的 karma 配置中禁用 webpack-dev-middleware 信息日志:
...
webpackMiddleware: {
noInfo: true
},
...
在 webpack-dev-middleware 包的自述文件中阅读有关 webpackMiddleware 部分可能选项的完整列表的更多信息。
检查 options of webpack-dev-middleware, I found out that you can get rid of the "「wdm」: wait until bundle finished: noop" output by specifying the following in your karma.conf.js
(right below the reporters 部分后):
webpackMiddleware: {
logLevel: 'error'
}
测试:
- 业力 3.1.1
- 因果网络包 3.0.5