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/包/webpack-fail-plugin。然而,这不是真的,正如我在这里的帖子所证实的那样。而且,事实上,ts-loader 本身声称您需要使用 webpack 2 的插件(请参阅https://github.com/TypeStrong/ts-loader#failing-the-build-on-typescript-compilation-错误)。为了尝试所有最后可能的解决方案,我将插件导入我的项目并尝试按照使用文档(https://github.com/TiddoLangerak/webpack-fail-plugin#usage)使用它。但是,唉,它失败了而不是构建。

我在试图理解 webpack 2 的解决方案时失去了理智。有没有人对此给出合理的答案?

4

1 回答 1

3

只需在 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 中进行测试。

希望这有帮助:)

于 2017-07-05T09:42:20.500 回答