title: compiler.hooks.normalModuleFactory.tap Cannot read property 'tap' of undefined
body: <p>I am trying to use this plugin from <a href="https://github.com/webpack/webpack/blob/master/lib/NormalModuleReplacementPlugin.js#L18" rel="nofollow noreferrer">here</a> and it's giving me an error. WHY!</p>
  
  <pre><code>               compiler.hooks.normalModuleFactory.tap(
                                                     ^
  
  TypeError: Cannot read property 'tap' of undefined
  </code></pre>
  
  <p>Here's the plugin</p>
  
  <pre><code>/*
      MIT License http://www.opensource.org/licenses/mit-license.php
      Author Tobias Koppers @sokra
  */
  "use strict";
  
  const path = require("path");
  
  class NormalModuleReplacementPlugin {
      constructor(resourceRegExp, newResource) {
          this.resourceRegExp = resourceRegExp;
          this.newResource = newResource;
      }
  
      apply(compiler) {
          const resourceRegExp = this.resourceRegExp;
          const newResource = this.newResource;
          compiler.hooks.normalModuleFactory.tap(
              "NormalModuleReplacementPlugin",
              nmf =&gt; {
                  nmf.hooks.beforeResolve.tap("NormalModuleReplacementPlugin", result =&gt; {
                      if (!result) return;
                      if (resourceRegExp.test(result.request)) {
                          if (typeof newResource === "function") {
                              newResource(result);
                          } else {
                              result.request = newResource;
                          }
                      }
                      return result;
                  });
                  nmf.hooks.afterResolve.tap("NormalModuleReplacementPlugin", result =&gt; {
                      if (!result) return;
                      if (resourceRegExp.test(result.resource)) {
                          if (typeof newResource === "function") {
                              newResource(result);
                          } else {
                              result.resource = path.resolve(
                                  path.dirname(result.resource),
                                  newResource
                              );
                          }
                      }
                      return result;
                  });
              }
          );
      }
  }
  
  module.exports = NormalModuleReplacementPlugin;
  </code></pre>