Explorar o código

fix #35: Bug: `npm run server:dev:watch` doesn't work on Google Chrome

Yuki Takei %!s(int64=9) %!d(string=hai) anos
pai
achega
e8db394931
Modificáronse 1 ficheiros con 30 adicións e 1 borrados
  1. 30 1
      lib/crowi/dev.js

+ 30 - 1
lib/crowi/dev.js

@@ -1,7 +1,9 @@
 const debug = require('debug')('crowi:crowi:dev');
 const path = require('path');
 const webpack = require('webpack');
-const helpers = require('./helpers')
+const helpers = require('./helpers');
+
+const LRWebSocketServer = require('livereload-server/lib/server');
 
 class CrowiDev {
 
@@ -16,6 +18,33 @@ class CrowiDev {
   }
 
   init() {
+    this.hackLRWebSocketServer();
+  }
+
+  /**
+   * prevent to crash socket with:
+   * -------------------------------------------------
+   * Error: read ECONNRESET
+   *     at exports._errnoException (util.js:1022:11)
+   *     at TCP.onread (net.js:569:26)
+   * -------------------------------------------------
+   *
+   * @see https://github.com/napcs/node-livereload/pull/15
+   *
+   * @memberOf CrowiDev
+   */
+  hackLRWebSocketServer() {
+    const orgCreateConnection = LRWebSocketServer.prototype._createConnection;
+
+    // replace https://github.com/livereload/livereload-server/blob/v0.2.3/lib/server.coffee#L74
+    LRWebSocketServer.prototype._createConnection = function(socket) {
+      // call original method with substituting 'this' obj
+      orgCreateConnection.call(this, socket);
+
+      socket.on('error', (err) => {
+        console.warn(`[WARN] Worthless error in client socket: '${err}'`);
+      });
+    }
   }
 
   /**