Socket.io: Tidak Dapat Menyelesaikan 'uws', Perbarui README atau "package.json"?

Dibuat pada 17 Mei 2018  ·  20Komentar  ·  Sumber: socketio/socket.io

Catatan : untuk pertanyaan dukungan, silakan gunakan salah satu saluran ini: stackoverflow atau slack

Yang kamu ingin:

  • [x] laporkan bug
  • [ ] meminta fitur

Perilaku saat ini

Saya mengunduh contoh proyek webpack-build-server dari cabang master socket.io, jalankan npm install untuk menginstal dependensi, dan akhirnya jalankan npm run build untuk mencoba membundel server, tetapi webpack memberi saya kesalahan berikut:

ERROR in ./~/engine.io/lib/server.js Module not found: Error: Can't resolve 'uws' in '/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/engine.io/lib' @ ./~/engine.io/lib/server.js 107:27-41 @ ./~/engine.io/lib/engine.io.js @ ./~/socket.io/lib/index.js @ ./lib/index.js

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

  1. Unduh cabang utama socket.io
  2. Pergi ke examples/webpack-build-server ;
  3. Jalankan npm install ;
  4. Jalankan npm run build ;

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

Perilaku yang diharapkan

File server.js harus dibuat di folder dist .

Mempersiapkan

  • OS: macOS Hight SIerra
  • browser: Safari
  • versi socket.io: 2.0.3

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

Ini yang tercetak di terminal saya

````

[email protected] build /Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server
webpack --config ./support/webpack.config.js

Hash: 997a1fd1ee0b1b064485
Versi: webpack 2.7.0
Waktu: 468ms
Potongan Ukuran Aset Nama Potongan
server.js 401 kB 0 [dipancarkan] [besar] utama
[0] ./~/debug/src/index.js 263 byte {0} [dibuat]
[7] ./~/socket.io-parser/index.js 8.04 kB {0} [dibuat]
[16] ./~/engine.io/lib/socket.js 11,6 kB {0} [dibuat]
[17] ./~/engine.io/lib/transports/index.js 509 byte {0} [dibuat]
[19] ./~/socket.io-parser/is-buffer.js 712 byte {0} [dibuat]
[20] ./~/socket.io/lib/namespace.js 5,81 kB {0} [dibangun]
[31] ./~/socket.io/lib/index.js 12.9 kB {0} [dibuat]
[32] ./lib/index.js 474 byte {0} [dibuat]
[43] ./~/engine.io/lib/engine.io.js 2.38 kB {0} [dibuat]
[44] ./~/engine.io/lib/server.js 15.1 kB {0} [dibuat]
[58] ./~/socket.io-adapter/index.js 5,44 kB {0} [dibuat]
[59] ./~/socket.io-client/package.json 3,19 kB {0} [dibangun]
[61] ./~/socket.io/lib 160 byte {0} [dibuat]
[62] ./~/socket.io/lib/client.js 5.9 kB {0} [dibuat]
[63] ./~/socket.io/lib/parent-namespace.js 917 byte {0} [dibuat]
+ 59 modul tersembunyi

PERINGATAN di ./~/ws/lib/Validation.js
Modul tidak ditemukan: Kesalahan: Tidak dapat menyelesaikan 'utf-8-validate' di '/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/ws/lib'
@ ./~/ws/lib/Validation.js 10:22-47
@ ./~/ws/lib/Receiver.js
@ ./~/ws/index.js
@ ./~/engine.io/lib/server.js
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js

PERINGATAN di ./~/ws/lib/BufferUtil.js
Modul tidak ditemukan: Kesalahan: Tidak dapat menyelesaikan 'bufferutil' di '/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/ws/lib'
@ ./~/ws/lib/BufferUtil.js 35:21-42
@ ./~/ws/lib/Receiver.js
@ ./~/ws/index.js
@ ./~/engine.io/lib/server.js
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js

PERINGATAN di ./~/socket.io/lib/index.js
113:11-32 Ketergantungan kritis: permintaan ketergantungan adalah ekspresi

GALAT di ./~/engine.io/lib/server.js
Modul tidak ditemukan: Kesalahan: Tidak dapat menyelesaikan 'uws' di '/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/engine.io/lib'
@ ./~/engine.io/lib/server.js 107:27-41
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js

npm ERR! kode ELIFECYCLE
npm ERR! salah 2
npm ERR! [email protected] build: webpack --config ./support/webpack.config.js
npm ERR! Keluar dari status 2
npm ERR!
npm ERR! Gagal di skrip pembuatan [email protected] .
npm ERR! Ini mungkin bukan masalah dengan npm. Kemungkinan ada output logging tambahan di atas.

npm ERR! Log lengkap dari proses ini dapat ditemukan di:
npm ERR! /Users/ZehuaChen/.npm/_logs/2018-05-17T21_30_47_624Z-debug.log
````

Memperbarui

Saya menginstal paket uws secara manual dan tampaknya berhasil. Dapatkah seseorang memperbarui file README atau package.json karena sangat sulit bagi pemula seperti saya untuk mengetahui hal ini.

Komentar yang paling membantu

Jadi saya baru saja mengalami masalah yang sama, tetapi untuk alasan yang sangat berbeda. Saat ini ketika saya menginstal paket server socket.io terbaru dari npm uws tidak akan ditemukan.

Ini terjadi karena penerbit uws baru-baru ini mengunggah paket kosong yang menghapus semua kode D yang sebenarnya:

Anda dapat memperbaikinya dengan menginstal rilis terakhir yang tidak dihancurkan

benang tambahkan [email protected]
npm instal [email protected]

Tautan ke paket kosong / usang: https://www.npmjs.com/package/uws

Info latar belakang berwawasan dari reddit: https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

Saya akan memposting ini di beberapa hasil teratas yang muncul ketika mencari masalah ini karena saya butuh beberapa saat untuk mencari tahu apa yang terjadi dan mudah-mudahan ini akan menyelamatkan seseorang di luar sana beberapa waktu!

Semua 20 komentar

Saya juga mendapatkan peringatan yang sama:

WARNING in ./~/ws/lib/BufferUtil.js
Module not found: Error: Can't resolve 'bufferutil' in '/Users/Ian/Code/ianpaschal/forge-server/node_modules/ws/lib'
 @ ./~/ws/lib/BufferUtil.js 35:21-42
 @ ./~/ws/lib/Sender.js
 @ ./~/ws/index.js
 @ ./~/engine.io/lib/server.js
 @ ./~/engine.io/lib/engine.io.js
 @ ./~/socket.io/lib/index.js
 @ ./src/server.js

WARNING in ./~/ws/lib/Validation.js
Module not found: Error: Can't resolve 'utf-8-validate' in '/Users/Ian/Code/ianpaschal/forge-server/node_modules/ws/lib'
 @ ./~/ws/lib/Validation.js 10:22-47
 @ ./~/ws/lib/Receiver.js
 @ ./~/ws/index.js
 @ ./~/engine.io/lib/server.js
 @ ./~/engine.io/lib/engine.io.js
 @ ./~/socket.io/lib/index.js
 @ ./src/server.js

WARNING in ./~/socket.io/lib/index.js
113:11-32 Critical dependency: the request of a dependency is an expression
// package.json
"webpack": "^2.7.0",
"socket.io": "^2.1.0",

Apakah Anda berhasil menyelesaikannya? Punya masalah yang sama..

Tidak. Itu hanya peringatan jadi tidak ada efek selain keluaran konsol yang jelek, tapi masih ada.

Itu tidak menghentikan Anda dari npm start , abaikan saja kesalahannya.

Jika Anda mengkompilasi hanya untuk node , Anda harus menambahkan opsi maka kesalahan akan hilang.
Anda harus menambahkan ke file konfigurasi Anda:

{
        ...
        target: 'node'
       ...
}

Jika tidak, Anda mengkompilasi hanya untuk web , maka tidak ada opsi yang perlu diteruskan (default='web') (atau target='web') tetapi Anda harus mengecualikan 'uws' agar tidak dibundel, karena tidak berfungsi di peramban.
Dalam hal ini Anda sebaiknya menambahkan:

{
        ...
        externals: {
            uws: "uws"
        },
       ...
}

@pirix-gh Sepertinya ini bukan masalahnya.

Dari konfigurasi saya:

const Webpack = require( "webpack" );

module.exports = {
    target: "node",
    node: {
        __dirname: true,
        __filename: true,
    },
    entry: {
        main: "./src/server.js",
    },
    plugins: [
        new Webpack.EnvironmentPlugin( [
            "NODE_ENV",
        ] ),
        new Webpack.IgnorePlugin( /uws/ )
    ],
};

@ianpaschal Ok, lalu mungkin Anda mengimpor proyek ke yang lain?

_Proyek_1_

  • Index.js: Impor _Socket.IO_

_Proyek_2_

  • Index.js: Impor _Project_1_

Paket Web: Kompilasi Proyek_2
-> Modul tidak ditemukan di Project_2

Dan ini mungkin terjadi karena ketergantungan dicari di Project_2 tetapi Project_1 menahannya.
Solusi untuk ini adalah menginstal ketergantungan yang hilang seperti yang Anda lakukan.
Atau publikasikan Project_1 Anda lalu impor sebagai ketergantungan ke Project_2.

Dengan melakukan ini, saya dapat mereproduksi kesalahan yang Anda berikan di atas

Terima kasih telah menjelaskan mengapa itu salah, dan memberikan pendekatan alternatif!

@Zehua-Chen Pleasure, harap ini memperbaiki masalah Anda. Saya tahu betapa menjengkelkannya untuk mempublikasikan sepanjang waktu jadi... Untuk kasus proyek terpisah ini, Anda dapat menggunakan selama pengembangan Anda:

npx @babel/node src/index.js atau
node -r @babel/register src/index.js

atau tergantung pada versi Anda

npx babel-node src/index.js atau
node -r babel-register src/index.js

Ini akan menyelesaikan dependensi dengan benar & run , tetapi ingat itu tidak cocok untuk produksi.
Jika Anda bekerja dalam produksi, Anda harus mempublikasikan paket Anda secara terpisah & menggunakan npm sebagai gantinya.

Saya melakukan banyak penelitian sekarang dan masih tidak mengerti masalah ini dan bagaimana menyelesaikannya.
Saya memiliki satu proyek , menggunakan socket.io dan membangun dengan webpack selalu gagal dengan masalah yang sama.

ERROR in ./node_modules/engine.io/lib/server.js
Module not found: Error: Can't resolve 'uws' in 'xxxxxxxx/node_modules/engine.io/lib'
 @ ./node_modules/engine.io/lib/server.js 107:27-41
 @ ./node_modules/engine.io/lib/engine.io.js
 @ ./node_modules/socket.io/lib/index.js

package.json

"dependencies": {
      "express": "^4.16.3",
      "socket.io": "^2.1.1"
   },
   "devDependencies": {
      "tslint": "^5.11.0",
      "typescript": "2.9.2",
      "uglifyjs-webpack-plugin": "^1.2.7",
      "webpack": "^4.16.4",
      "webpack-cli": "^3.1.0"
   },

webpack.config.js

const path = require('path');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

module.exports = {
   target: 'node',
   mode: 'development',
   entry: './dist/index.js',
   output: {
      filename: 'index.js',
      path: path.resolve(__dirname, 'dist/00-bundle')
   },
   optimization: {
      minimizer: [
         new UglifyJsPlugin()
      ]
   }
};

@btxtiger itu karena Anda tidak boleh menggabungkan dependensi Anda saat bekerja dengan node (akan diinstal dengan package.json). Ini adalah perilaku default untuk webpack , karena ini menggabungkan proyek Anda untuk web .

Tambahkan ini ke conf Anda, itu akan mengecualikan dependensi Anda dengan membaca package.json Anda

const nodeExternals = require('webpack-node-externals');

module.exports = {
...
mode: 'development',
...
externals: [nodeExternals({
               modulesFromFile: true
          })];
...
}

Dengan cara ini Anda akan mendapatkan (hampir) paket yang dapat diterbitkan

@pirix-gh Terima kasih! Oke, itu masuk akal. Saya berharap bisa membuat bundel lengkap yang hanya perlu didorong ke server tanpa perlu menginstal/memperbarui modul melalui package.json. Saya masih tidak yakin apakah ini benar-benar tidak mungkin, kecuali untuk kesalahan dengan socket.io itu tampaknya berhasil.

@btxtiger Anda dapat melakukannya secara lokal. Hanya saja, jangan mempublikasikannya di NPM karena melanggar aturan ketergantungan.
uws dikompilasi dengan cepat saat menggunakan npm i karena ini adalah modul C++ yang dibungkus dengan Node.js .
Jadi itu tidak dapat dibundel seperti js standar dan harus diinstal (yang memicu kompilasi untuk OS Anda).
Itu sebabnya Anda harus selalu menggunakan sistem ketergantungan NPM , maka Anda tidak perlu bertanya pada diri sendiri pertanyaan itu.

Jika Anda masih ingin melakukan ini, cobalah untuk mengecualikan uws:

{
        ...
        externals: {
            uws: "uws"
        },
       ...
}

@pirix-gh Bagus, terima kasih banyak atas penjelasannya. Saya pindah ke package.json yang dioptimalkan yang mengecualikan semua dependensi dev saat membangun dengan webpack, dan selalu menjalankan npm install sebelum memulai. Tampaknya menjadi solusi terbaik untuk saat ini.

Saya tidak punya waktu untuk men-debug sepenuhnya, tetapi ketika memutakhirkan dari karma^2.0.0 ke karma^3.0.0 Saya mendapatkan kesalahan ini pada build webpack saya:

Module not found: Error: Can't resolve 'uws'

Jadi menjaga Karma di 2.0.0 adalah solusi bagi saya.

Saya mendapatkan masalah ini setiap kali saya mengimpor atau membutuhkan socket.io. Saya sudah mencoba menginstal uws secara manual dan Node masih tidak dapat menyelesaikan uws.

Saya mendapatkan masalah ini juga, saya tidak jelas bagaimana menyelesaikannya.

Webpack / orang-orang front-end, jika Anda hanya perlu SocketIO di aplikasi sisi klien Anda untuk terhubung ke beberapa server WebSocket, Anda bisa menggunakan ini: https://github.com/socketio/socket.io-client

Memecahkan masalah Module not found: Error: Can't resolve 'uws' saya!

Jadi saya baru saja mengalami masalah yang sama, tetapi untuk alasan yang sangat berbeda. Saat ini ketika saya menginstal paket server socket.io terbaru dari npm uws tidak akan ditemukan.

Ini terjadi karena penerbit uws baru-baru ini mengunggah paket kosong yang menghapus semua kode D yang sebenarnya:

Anda dapat memperbaikinya dengan menginstal rilis terakhir yang tidak dihancurkan

benang tambahkan [email protected]
npm instal [email protected]

Tautan ke paket kosong / usang: https://www.npmjs.com/package/uws

Info latar belakang berwawasan dari reddit: https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

Saya akan memposting ini di beberapa hasil teratas yang muncul ketika mencari masalah ini karena saya butuh beberapa saat untuk mencari tahu apa yang terjadi dan mudah-mudahan ini akan menyelamatkan seseorang di luar sana beberapa waktu!

Bagi saya, --target node melalui CLI atau konfigurasi adalah kuncinya dan menyelesaikan semua masalah saya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat