如何在 TS 编译错误时使 webpack2 失败?
How Do I Fail webpack2 on a TS Compile Error?
我有一个运行良好的 webpack2 配置,除了如果出现 TS 编译错误我不希望构建继续。这是我得到的合法错误的示例:
ERROR in ./ClientSide/app/panels/panel-side-bar/my-organizer/my-organizer.component.ts
(127,33): error TS2346: Supplied parameters do not match any signature of call target.
这是一个正确的错误,但我希望 webpack 不只是继续。目前,无论 webpack 编译过程中出现什么 TS 编译错误,webpack 仍然会构建 bundle。我想让 webpack 抛出它已经发出的错误(红色),并在发生这种情况时停止捆绑过程。
我尝试在 webpack.config:
中添加配置开关
bail: true,
但这并没有解决问题。
如果我应该在 TS 的加载程序中识别某些内容,我将如何告诉它将错误推送到 webpack2?我尝试了以下 TS 加载器选项,但它们没有将错误传播到 webpack 的效果:
module: {
rules: [
{
test: /\.tsx?$/,
use: ['ts-loader?' + JSON.stringify({transpileOnly: false, noEmitOnError: true})],
exclude: [/node_modules/, /test/]
},
然而,这也不起作用。
似乎应该以某种方式内置到 webpack 或其加载程序中,以正确传播错误直至使进程失败。任何人都有一个解决方案可以让我配置这样的失败冒泡并且仍然允许我查看正在产生的 TS 错误(这样我不仅可以知道构建失败,而且可以知道导致它的特定 TS 错误).
我做了一些研究,发现有人声称使用 (webpack-fail-plugin
) 应该可以解决这个问题,然而,这显然只适用于 webpack 1。据推测,webpack2 解决了这个问题,正如插件明确声明的那样https://www.npmjs.com/package/webpack-fail-plugin . However, this is not true, as my post here is confirming. And, in fact, the ts-loader itself claims that you will need to use the plugin for webpack 2 (see https://github.com/TypeStrong/ts-loader#failing-the-build-on-typescript-compilation-error ). To try every last possible solution, I imported the plugin to my project and tried using it as per the usage docs ( https://github.com/TiddoLangerak/webpack-fail-plugin#usage)。但是,唉,它没有构建失败。
我正在努力理解 webpack 2 的解决方案。有人对此给出了合理的答案吗?
只需在您的 webpack 配置中添加一个插件,如下所示:
plugins: [function() {
this.plugin("done", function(stats) {
//Since webpack dependent Stats.js
//Just see the API of Stats.js
//You can do anything with the stats output
if (stats && stats.hasErrors()) {
stats.toJson().errors.forEach((err) => {
console.error(err);
});
process.exit(1);
}
}
}]
使用 ts-loader 2.2.2 在 Webpack 2.6.1 中进行测试。
希望对您有所帮助:)
我有一个运行良好的 webpack2 配置,除了如果出现 TS 编译错误我不希望构建继续。这是我得到的合法错误的示例:
ERROR in ./ClientSide/app/panels/panel-side-bar/my-organizer/my-organizer.component.ts
(127,33): error TS2346: Supplied parameters do not match any signature of call target.
这是一个正确的错误,但我希望 webpack 不只是继续。目前,无论 webpack 编译过程中出现什么 TS 编译错误,webpack 仍然会构建 bundle。我想让 webpack 抛出它已经发出的错误(红色),并在发生这种情况时停止捆绑过程。
我尝试在 webpack.config:
中添加配置开关bail: true,
但这并没有解决问题。
如果我应该在 TS 的加载程序中识别某些内容,我将如何告诉它将错误推送到 webpack2?我尝试了以下 TS 加载器选项,但它们没有将错误传播到 webpack 的效果:
module: {
rules: [
{
test: /\.tsx?$/,
use: ['ts-loader?' + JSON.stringify({transpileOnly: false, noEmitOnError: true})],
exclude: [/node_modules/, /test/]
},
然而,这也不起作用。
似乎应该以某种方式内置到 webpack 或其加载程序中,以正确传播错误直至使进程失败。任何人都有一个解决方案可以让我配置这样的失败冒泡并且仍然允许我查看正在产生的 TS 错误(这样我不仅可以知道构建失败,而且可以知道导致它的特定 TS 错误).
我做了一些研究,发现有人声称使用 (webpack-fail-plugin
) 应该可以解决这个问题,然而,这显然只适用于 webpack 1。据推测,webpack2 解决了这个问题,正如插件明确声明的那样https://www.npmjs.com/package/webpack-fail-plugin . However, this is not true, as my post here is confirming. And, in fact, the ts-loader itself claims that you will need to use the plugin for webpack 2 (see https://github.com/TypeStrong/ts-loader#failing-the-build-on-typescript-compilation-error ). To try every last possible solution, I imported the plugin to my project and tried using it as per the usage docs ( https://github.com/TiddoLangerak/webpack-fail-plugin#usage)。但是,唉,它没有构建失败。
我正在努力理解 webpack 2 的解决方案。有人对此给出了合理的答案吗?
只需在您的 webpack 配置中添加一个插件,如下所示:
plugins: [function() {
this.plugin("done", function(stats) {
//Since webpack dependent Stats.js
//Just see the API of Stats.js
//You can do anything with the stats output
if (stats && stats.hasErrors()) {
stats.toJson().errors.forEach((err) => {
console.error(err);
});
process.exit(1);
}
}
}]
使用 ts-loader 2.2.2 在 Webpack 2.6.1 中进行测试。
希望对您有所帮助:)