如何在Flow编译成功时运行clean-webpack-plugin?

时间:2017-05-10 12:02:17

标签: webpack webpack-2

我正在使用clean-webpack-plugin在构建之前删除/dist文件夹,而仅在编译阶段使用Flow成功

我遇到的问题是,即使Flow抛出错误,clean插件也会运行。

enter image description here

可以解决这个问题(我的意思是当出现编译错误时,不要删除“dist”文件夹)?

./ SRC / app.js

function init(a: number) {
    //...
}
init("2");

./ webpack.config.json

const path = require("path");
const webpack = require("webpack");
const flowTypeLoaderPlugin = require("flowtype-loader/plugin");
const CleanWebpackPlugin = require("clean-webpack-plugin");

module.exports = [{
    entry : "./src/app.js",
    output : {
        filename : "build.js",
        path : path.resolve(__dirname, "dist")
    },
    module : {
        loaders : [
            /*{
                test: /\.js$/,
                enforce: "pre",
                use: CleanWebpackPlugin(["dist"], {
                    root: "/dist",
                    verbose: true,
                    dry: true,
                    "watch": true
                    })
            },*/
            {
                test : /\.js$/,
                loader : "flowtype-loader",
                enforce : "pre",
                exclude : /node_modules/
            },
            {
                test : /\.jsx?$/,
                enforce : "pre",
                loader : "remove-flow-types-loader",
                include : path.join(__dirname, "src")
            }
        ]
    },
    plugins : [
        new flowTypeLoaderPlugin({cwd : path.resolve(__dirname, "src"), failOnError : true}),

        //Empty "dist" folder
        new CleanWebpackPlugin(["dist"], {
            root: "/",
            verbose: true,
            dry: true,
            "watch": true
        })
    ]
}];

1 个答案:

答案 0 :(得分:0)

可以解决的一种方法是通过添加" should-emit "来修改CleanWebpackPlugin的代码。条件。它对我有用,但我不确定它是否适用于所有可能的情况:

CleanWebpackPlugin.prototype.apply = function(compiler) {
  var _this = this;
  if (compiler === undefined) {
    return clean.call(_this);
  } else {
    compiler.plugin("should-emit", compilation => {
      if (_this.options.watch) {
        compiler.plugin("compile", function(params) {
          clean.call(_this);
        });
      } else {
        return clean.call(_this);
      }
    });
  }
};

这还要求您在webpack配置文件中使用另一个插件: NoEmitOnErrorsPlugin