Socket.io: Kann 'uws' nicht auflösen, README oder "package.json" aktualisieren?

Erstellt am 17. Mai 2018  ·  20Kommentare  ·  Quelle: socketio/socket.io

Hinweis : Verwenden Sie für Supportfragen bitte einen dieser Kanäle: stackoverflow oder slack

Sie wollen:

  • [x] Fehler melden
  • [ ] eine Funktion anfordern

Aktuelles Verhalten

Ich habe das Beispielprojekt webpack-build-server aus dem master-Zweig von socket.io heruntergeladen, npm install ausgeführt, um die Abhängigkeiten zu installieren, und schließlich npm run build ausgeführt, um zu versuchen, den Server zu bündeln, aber webpack gibt mir das folgende fehler:

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

Schritte zum Reproduzieren (wenn das aktuelle Verhalten ein Fehler ist)

  1. Laden Sie den master-Zweig von socket.io herunter
  2. Gehen Sie zu examples/webpack-build-server ;
  3. Führen Sie npm install ;
  4. Führen Sie npm run build ;

Hinweis : Der beste Weg, um eine schnelle Antwort zu erhalten, besteht darin, einen fehlgeschlagenen Testfall bereitzustellen, indem Sie beispielsweise die folgende Geige forken.

Erwartetes Verhalten

Eine server.js-Datei sollte im Ordner dist erstellt werden.

Aufstellen

  • Betriebssystem: macOS Hight Sierra
  • Browser: Safari
  • socket.io-Version: 2.0.3

Sonstige Informationen (z. B. Stacktraces, verwandte Probleme, Lösungsvorschläge)

Das sind die Angaben in meinem Terminal

````

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

Hash: 997a1fd1ee0b1b064485
Version: Webpaket 2.7.0
Zeit: 468 ms
Asset-Größe Chunks Chunk-Namen
server.js 401 kB 0 [ausgegeben] [groß] main
[0] ./~/debug/src/index.js 263 Byte {0} [erstellt]
[7] ./~/socket.io-parser/index.js 8,04 kB {0} [gebaut]
[16] ./~/engine.io/lib/socket.js 11,6 kB {0} [gebaut]
[17] ./~/engine.io/lib/transports/index.js 509 Byte {0} [gebaut]
[19] ./~/socket.io-parser/is-buffer.js 712 Byte {0} [gebaut]
[20] ./~/socket.io/lib/namespace.js 5,81 kB {0} [gebaut]
[31] ./~/socket.io/lib/index.js 12,9 kB {0} [gebaut]
[32] ./lib/index.js 474 Byte {0} [gebaut]
[43] ./~/engine.io/lib/engine.io.js 2,38 kB {0} [gebaut]
[44] ./~/engine.io/lib/server.js 15,1 kB {0} [gebaut]
[58] ./~/socket.io-adapter/index.js 5,44 kB {0} [gebaut]
[59] ./~/socket.io-client/package.json 3,19 kB {0} [gebaut]
[61] ./~/socket.io/lib 160 Bytes {0} [gebaut]
[62] ./~/socket.io/lib/client.js 5,9 kB {0} [gebaut]
[63] ./~/socket.io/lib/parent-namespace.js 917 Byte {0} [gebaut]
+ 59 versteckte Module

WARNUNG in ./~/ws/lib/Validation.js
Modul nicht gefunden: Fehler: Kann „utf-8-validate“ in „/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/ws/lib“ nicht auflösen
@ ./~/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

WARNUNG in ./~/ws/lib/BufferUtil.js
Modul nicht gefunden: Fehler: „bufferutil“ kann in „/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/ws/lib“ nicht aufgelöst werden
@ ./~/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

WARNUNG in ./~/socket.io/lib/index.js
113:11-32 Kritische Abhängigkeit: Die Anforderung einer Abhängigkeit ist ein Ausdruck

FEHLER in ./~/engine.io/lib/server.js
Modul nicht gefunden: Fehler: „uws“ kann in „/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/engine.io/lib“ nicht aufgelöst werden
@ ./~/engine.io/lib/server.js 107:27-41
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js

npm ERR! Code ELIFECYCLE
npm ERR! fehler 2
npm ERR! [email protected] : webpack --config ./support/webpack.config.js
npm ERR! Ausgangszustand 2
npm ERR!
npm ERR! Fehler beim Build-Skript [email protected] .
npm ERR! Dies ist wahrscheinlich kein Problem mit npm. Oben befindet sich wahrscheinlich eine zusätzliche Protokollausgabe.

npm ERR! Ein vollständiges Protokoll dieses Laufs finden Sie in:
npm ERR! /Users/ZehuaChen/.npm/_logs/2018-05-17T21_30_47_624Z-debug.log
````

Aktualisieren

Ich installiere das Paket uws manuell und es scheint zu funktionieren. Kann jemand die README-Datei oder die package.json aktualisieren, da es für einen Anfänger wie mich wirklich schwierig ist, dies herauszufinden.

Hilfreichster Kommentar

Also ich hatte gerade das gleiche Problem, aber aus einem ganz anderen Grund. Wenn ich derzeit das neueste socket.io-Serverpaket von npm installiere, wird uws nicht gefunden.

Dies geschieht, weil der Herausgeber von uws kürzlich ein leeres Paket hochgeladen hat, das den gesamten eigentlichen Code D löscht:

Sie können dies beheben, indem Sie die letzte nicht zerstörte Version installieren

Garn hinzufügen [email protected]
npm installiere [email protected]

Link zum leeren / veralteten Paket: https://www.npmjs.com/package/uws

Aufschlussreiche Hintergrundinformationen von reddit: https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

Ich werde dies in den oberen paar Ergebnissen posten, die bei der Suche nach diesem Problem angezeigt werden, da ich eine Weile gebraucht habe, um herauszufinden, was los ist, und hoffentlich wird dies jemandem da draußen etwas Zeit ersparen!

Alle 20 Kommentare

Ich bekomme auch die gleichen Warnungen:

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",

Hast du es geschafft, es zu lösen? Habe das gleiche Problem..

Nö. Es ist nur eine Warnung, also gibt es keinen anderen Effekt als eine hässliche Konsolenausgabe, aber es ist immer noch da.

Es hält Sie nicht von npm start ab, ignorieren Sie einfach den Fehler.

Wenn Sie nur für node kompilieren, sollten Sie die Option hinzufügen, dann verschwindet der Fehler.
Sie sollten Ihrer Konfigurationsdatei Folgendes hinzufügen:

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

Andernfalls kompilieren Sie nur für das Web , dann muss keine Option übergeben werden (default='web') (oder target='web'), aber Sie sollten 'uws' von der Bündelung ausschließen, da es in der nicht funktioniert Browser.
In diesem Fall sollten Sie eher hinzufügen:

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

@pirix-gh Dies scheint nicht das Problem zu sein.

Aus meiner Konfig:

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, dann importierst du vielleicht ein Projekt in ein anderes?

_Projekt 1_

  • Index.js: _Socket.IO_ importieren

_Projekt_2_

  • Index.js: _Projekt_1_ importieren

Webpack: Projekt_2 kompilieren
-> Modul nicht in Projekt_2 gefunden

Dies kann passieren, weil die Abhängigkeit in Project_2 nachgeschlagen wird, Project_1 sie jedoch enthält.
Eine Lösung hierfür besteht entweder darin, die fehlende Abhängigkeit so zu installieren, wie Sie es getan haben.
Oder veröffentlichen Sie Ihr Projekt_1 und importieren Sie es dann als Abhängigkeit in Projekt_2.

Auf diese Weise kann ich die oben angegebenen Fehler reproduzieren

Vielen Dank für die Erklärung, warum es schief gelaufen ist, und für die Bereitstellung eines alternativen Ansatzes!

@Zehua-Chen Pleasure, hoffe, es hat dein Problem behoben. Ich weiß, wie nervig es sein kann, die ganze Zeit zu veröffentlichen, also ... Für diesen Fall von aufgeteilten Projekten können Sie während Ihrer Entwicklung Folgendes verwenden:

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

oder abhängig von Ihrer Version

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

Es wird die Abhängigkeiten ordnungsgemäß auflösen und ausführen , aber denken Sie daran, dass es nicht für die Produktion geeignet ist.
Wenn Sie in der Produktion arbeiten, sollten Sie Ihre Pakete separat veröffentlichen und stattdessen npm verwenden.

Ich habe jetzt viel recherchiert und verstehe das Problem und die Lösung immer noch nicht.
Ich habe ein einzelnes Projekt , verwende socket.io und das Erstellen mit Webpack schlägt immer mit demselben Problem fehl.

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

Paket.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 liegt daran, dass Sie Ihre Abhängigkeiten nicht bündeln dürfen, wenn Sie mit node arbeiten (wird mit package.json installiert). Dies ist das Standardverhalten für webpack , da es Ihr Projekt für das Web bündelt .

Fügen Sie dies zu Ihrer conf hinzu, es schließt Ihre Abhängigkeiten aus, indem es Ihre package.json liest

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

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

Auf diese Weise erhalten Sie (fast) ein veröffentlichungsfähiges Paket

@pirix-gh Danke! Okay, das macht Sinn. Ich hatte gehofft, ein vollständiges Bundle erstellen zu können, das nur auf den Server übertragen werden muss, ohne dass Module über package.json installiert/aktualisiert werden müssen. Ich bin mir immer noch nicht sicher, ob das wirklich nicht möglich ist, außer diesem Fehler mit socket.io scheint es zu funktionieren.

@btxtiger Das kannst du lokal machen. Veröffentlichen Sie es einfach nicht auf NPM, da es gegen die Abhängigkeitsregeln verstößt.
uws wird spontan kompiliert, wenn npm i verwendet wird, da es sich um ein C++-Modul handelt, das in Node.js eingeschlossen ist.
Es kann also nicht wie Standard-js gebündelt werden und muss stattdessen installiert werden (was die Kompilierung für Ihr Betriebssystem auslöst ).
Deshalb sollten Sie immer das NPM -Abhängigkeitssystem verwenden, dann müssen Sie sich diese Frage nicht stellen.

Wenn Sie dies dennoch tun möchten, versuchen Sie, uws auszuschließen:

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

@pirix-gh Großartig, vielen Dank für die Erklärung. Ich bin zu einer optimierten package.json gewechselt, die alle Entwicklerabhängigkeiten beim Erstellen mit Webpack ausschließt und vor dem Start immer npm install ausführt. Scheint im Moment die beste Lösung zu sein.

Ich hatte keine Zeit, es vollständig zu debuggen, aber beim Upgrade von karma^2.0.0 auf karma^3.0.0 bekam ich diesen Fehler in meinem Webpack-Build:

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

Karma bei 2.0.0 zu halten war also die Lösung für mich.

Ich erhalte dieses Problem, wenn ich socket.io importiere oder benötige. Ich habe versucht, uws manuell zu installieren, und Node kann uws immer noch nicht auflösen.

Ich habe dieses Problem auch, ich weiß nicht, wie ich es lösen soll.

Webpack-/Front-End-Leute, wenn Sie nur SocketIO in Ihrer clientseitigen App benötigen, um sich mit einem WebSocket-Server zu verbinden, können Sie einfach dies verwenden: https://github.com/socketio/socket.io-client

Mein Problem Module not found: Error: Can't resolve 'uws' wurde gelöst!

Also ich hatte gerade das gleiche Problem, aber aus einem ganz anderen Grund. Wenn ich derzeit das neueste socket.io-Serverpaket von npm installiere, wird uws nicht gefunden.

Dies geschieht, weil der Herausgeber von uws kürzlich ein leeres Paket hochgeladen hat, das den gesamten eigentlichen Code D löscht:

Sie können dies beheben, indem Sie die letzte nicht zerstörte Version installieren

Garn hinzufügen [email protected]
npm installiere [email protected]

Link zum leeren / veralteten Paket: https://www.npmjs.com/package/uws

Aufschlussreiche Hintergrundinformationen von reddit: https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

Ich werde dies in den oberen paar Ergebnissen posten, die bei der Suche nach diesem Problem angezeigt werden, da ich eine Weile gebraucht habe, um herauszufinden, was los ist, und hoffentlich wird dies jemandem da draußen etwas Zeit ersparen!

Für mich war --target node über die CLI oder Konfiguration der Schlüssel und hat alle meine Probleme gelöst.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen