wasm-pack-plugin icon indicating copy to clipboard operation
wasm-pack-plugin copied to clipboard

wasm-pack build error not correctly propagated to webpack

Open ilyvion opened this issue 4 years ago • 1 comments

If the call to wasm-pack build fails, yarn (which runs webpack --mode production) still returns an error code of 0. I traced the problem to this bit of code:

compiler.hooks.thisCompilation.tap('WasmPackPlugin', (compilation) => {
  // Super hacky, needed to workaround a bug in Webpack which causes
  // thisCompilation to be triggered twice on the first compilation.
  if (first) {
    first = false;

  } else {
    // This is needed in order to gracefully handle errors in Webpack,
    // since Webpack has its own custom error system.
    if (this.error != null) {
      compilation.errors.push(this.error);
    }
  }
});

Since first is true (at least in the cases I tested), the else branch never triggers, and so no error is reported back to webpack. By moving the

if (this.error != null) {
  compilation.errors.push(this.error);
}

bit into the if branch, I got the behavior I expected; i.e. the output from yarn is

ERROR in Rust compilation.
error Command failed with exit code 2.

instead of

Done in 1.66s.

ilyvion avatar Jul 05 '20 05:07 ilyvion

Possibly related: if I use Webpack to build both the WASM and some TypeScript that depends on this WASM, then compilation of the TypeScript code proceeds even if compiling the Rust code failed (and might also subsequently fail if the bindings' API changed).

Edit: probably unrelated, because the PR by @nanaian above doesn't fix it. #47 is probably closer to what I was talking about.

ttencate avatar Jun 22 '21 07:06 ttencate