Socket.io: Server.prototype.serveClient не работает с webpack

Созданный на 29 июл. 2017  ·  4Комментарии  ·  Источник: socketio/socket.io

  • [x] сообщить об ошибке

Текущее поведение

Функция использует относительный путь для проверки socket.io-client. Однако, если я использую webpack для объединения приложения nodejs, которое использует webpack. Это станет относительным путем к socket.io-client в node_modules.

После этого запущенный узел вернет ошибку:

Ошибка: не удается найти модуль "."

Действия по воспроизведению (если текущее поведение является ошибкой)

Примечание : лучший способ получить быстрый ответ - предоставить неудачный тестовый пример, например, путем разветвления следующей скрипки .

Скомпилированный код в пакете выглядит следующим образом:

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;
};

Ожидаемое поведение

Пакет должен нормально компилироваться с webpack и работать без сбоев.

Настраивать

  • ОС: Windows
  • браузер: N / A
  • версия socket.io:
    "webpack": "^ 3.3.0"
    "socket.io": "^ 2.0.3",
    "socket.io-client": "^ 2.0.3"

    Другая информация (например, трассировки стека, связанные проблемы, предложения по исправлению)

Самый полезный комментарий

Попробуйте отключить _serving client files_ feat.

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

Не идеально, но по крайней мере связка работает.

Все 4 Комментарий

та же проблема

Попробуйте отключить _serving client files_ feat.

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

Не идеально, но по крайней мере связка работает.

Я думаю, что это та же ошибка, я попадаю во время выполнения с помощью веб-пакета

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

Я не использую socket.io self, но это зависимость androidjs

если я использую raw-loader следующим патчем, он работает

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');
     }

Спасибо, это сработало для меня.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги