Socket.io: Server.prototype.serveClient ne fonctionne pas avec webpack

Créé le 29 juil. 2017  ·  4Commentaires  ·  Source: socketio/socket.io

  • [x] signaler un bogue

Comportement actuel

La fonction utilise un chemin relatif pour vérifier socket.io-client. Cependant, si j'utilise webpack pour regrouper une application nodejs qui utilise webpack. Cela deviendra le chemin relatif vers socket.io-client dans node_modules.

Le nœud en cours d'exécution renverra alors une erreur :

Erreur : Impossible de trouver le module "."

Étapes à reproduire (si le comportement actuel est un bug)

Remarque : le meilleur moyen d'obtenir une réponse rapide est de fournir un cas de test défaillant, en forçant le violon suivant par exemple.

Le code compilé dans le bundle devient :

Server.prototype.serveClient = function(v){
  if (!arguments.length) return this._serveClient;
  this._serveClient = v;
  var resolvePath = function(file){
    var filepath = path.resolve(__dirname, './../../', file);
    if (exists(filepath)) {
      return filepath;
    }
    return /*require.resolve*/(!(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
  };
  if (v && !clientSource) {
    clientSource = read(resolvePath( 'socket.io-client/dist/socket.io.js'), 'utf-8');
    try {
      clientSourceMap = read(resolvePath( 'socket.io-client/dist/socket.io.js.map'), 'utf-8');
    } catch(err) {
      debug('could not load sourcemap file');
    }
  }
  return this;
};

Comportement attendu

Le package devrait se compiler correctement avec webpack et fonctionner correctement.

Installer

  • OS : Windows
  • navigateur : N/A
  • version socket.io :
    "webpack": "^3.3.0"
    "socket.io": "^2.0.3",
    "socket.io-client": "^2.0.3"

    Autres informations (par exemple, stacktraces, problèmes connexes, suggestions de résolution)

Commentaire le plus utile

Essayez de désactiver la fonctionnalité _serving client files_ de socket.io.

const io = require('socket.io')(httpServer, { serveClient: false })

Pas idéal, mais au moins le bundle fonctionne.

Tous les 4 commentaires

même problème

Essayez de désactiver la fonctionnalité _serving client files_ de socket.io.

const io = require('socket.io')(httpServer, { serveClient: false })

Pas idéal, mais au moins le bundle fonctionne.

Je pense que c'est la même erreur, je passe au runtime en utilisant webpack

Error: Cannot find module 'socket.io-client/dist/socket.io.js'

Je n'utilise pas socket.io self, mais c'est une dépendance de androidjs

si j'utilise raw-loader par le patch suivant, ça marche

diff --git a/node_modules/socket.io/lib/index.js b/node_modules/socket.io/lib/index.js
index 5287e4e..9ee4577
--- a/node_modules/socket.io/lib/index.js
+++ b/node_modules/socket.io/lib/index.js
@@ -113,9 +113,9 @@ Server.prototype.serveClient = function(v){
     return require.resolve(file);
   };
   if (v && !clientSource) {
-    clientSource = read(resolvePath( 'socket.io-client/dist/socket.io.js'), 'utf-8');
+    clientSource = require( 'raw-loader!socket.io-client/dist/socket.io.js');
     try {
-      clientSourceMap = read(resolvePath( 'socket.io-client/dist/socket.io.js.map'), 'utf-8');
+      clientSourceMap = require( 'raw-loader!socket.io-client/dist/socket.io.js.map');
     } catch(err) {
       debug('could not load sourcemap file');
     }

Merci cela a fonctionné pour moi.

Cette page vous a été utile?
0 / 5 - 0 notes