Socket.io: Server.prototype.serveClient tidak bekerja dengan webpack

Dibuat pada 29 Jul 2017  ·  4Komentar  ·  Sumber: socketio/socket.io

  • [x] laporkan bug

Perilaku saat ini

Fungsi ini menggunakan jalur relatif untuk memeriksa socket.io-client. Namun, jika saya menggunakan webpack untuk membundel aplikasi nodejs yang menggunakan webpack. Ini akan menjadi jalur relatif ke socket.io-client di node_modules.

Menjalankan node kemudian akan mengembalikan kesalahan:

Kesalahan: Tidak dapat menemukan modul "."

Langkah-langkah untuk mereproduksi (jika perilaku saat ini adalah bug)

Catatan : cara terbaik untuk mendapatkan jawaban cepat adalah dengan memberikan kasus uji yang gagal, dengan forking biola berikut misalnya.

Kode yang dikompilasi dalam bundel menjadi:

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

Perilaku yang diharapkan

Paket harus dikompilasi dengan webpack dengan baik dan berjalan dengan lancar.

Mempersiapkan

  • OS: Windows
  • browser: T/A
  • versi socket.io:
    "webpack": "^3.3.0"
    "socket.io": "^2.0.3",
    "socket.io-client": "^2.0.3"

    Informasi lain (mis. stacktrace, masalah terkait, saran cara memperbaikinya)

Komentar yang paling membantu

Coba nonaktifkan fitur _serving client files_ socket.io.

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

Tidak ideal, tetapi setidaknya bundelnya berfungsi.

Semua 4 komentar

masalah yang sama

Coba nonaktifkan fitur _serving client files_ socket.io.

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

Tidak ideal, tetapi setidaknya bundelnya berfungsi.

Saya pikir ini adalah kesalahan yang sama, saya mendapatkan runtime dengan menggunakan webpack

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

Saya tidak menggunakan socket.io sendiri, tetapi ini adalah ketergantungan androidjs

jika saya menggunakan raw-loader dengan mengikuti tambalan, itu berhasil

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

Terima kasih ini berhasil untuk saya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat