Socket.io: Impossible de résoudre 'uws', mettre à jour README ou "package.json" ?

Créé le 17 mai 2018  ·  20Commentaires  ·  Source: socketio/socket.io

Remarque : pour les questions d'assistance, veuillez utiliser l'un de ces canaux : stackoverflow ou slack

Vous voulez:

  • [x] signaler un bogue
  • [ ] demander une fonctionnalité

Comportement actuel

J'ai téléchargé l'exemple de projet webpack-build-server à partir de la branche principale de socket.io, exécuté npm install pour installer les dépendances, et enfin exécuté npm run build pour essayer de regrouper le serveur, mais webpack me donne le erreurs suivantes :

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

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

  1. Télécharger la branche principale de socket.io
  2. Aller à examples/webpack-build-server ;
  3. Exécutez npm install ;
  4. Exécutez npm run build ;

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

Comportement attendu

Un fichier server.js doit être produit dans le dossier dist .

Installer

  • Système d'exploitation : macOS Hight SIerra
  • navigateur : Safari
  • version socket.io : 2.0.3

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

Ce sont ce qui est imprimé dans mon terminal

````

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

Hachage : 997a1fd1ee0b1b064485
Version : webpack 2.7.0
Temps : 468 ms
Noms des blocs de taille d'actif
server.js 401 kB 0 [émis] [gros] main
[0] ./~/debug/src/index.js 263 octets {0} [construit]
[7] ./~/socket.io-parser/index.js 8,04 Ko {0} [construit]
[16] ./~/engine.io/lib/socket.js 11,6 Ko {0} [construit]
[17] ./~/engine.io/lib/transports/index.js 509 octets {0} [construit]
[19] ./~/socket.io-parser/is-buffer.js 712 octets {0} [construit]
[20] ./~/socket.io/lib/namespace.js 5,81 Ko {0} [construit]
[31] ./~/socket.io/lib/index.js 12,9 Ko {0} [construit]
[32] ./lib/index.js 474 octets {0} [construit]
[43] ./~/engine.io/lib/engine.io.js 2,38 Ko {0} [construit]
[44] ./~/engine.io/lib/server.js 15,1 Ko {0} [construit]
[58] ./~/socket.io-adapter/index.js 5,44 Ko {0} [construit]
[59] ./~/socket.io-client/package.json 3,19 Ko {0} [construit]
[61] ./~/socket.io/lib 160 octets {0} [construit]
[62] ./~/socket.io/lib/client.js 5,9 Ko {0} [construit]
[63] ./~/socket.io/lib/parent-namespace.js 917 octets {0} [construit]
+ 59 modules cachés

AVERTISSEMENT dans ./~/ws/lib/Validation.js
Module introuvable : erreur : impossible de résoudre 'utf-8-validate' dans '/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

AVERTISSEMENT dans ./~/ws/lib/BufferUtil.js
Module introuvable : erreur : impossible de résoudre 'bufferutil' dans '/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

AVERTISSEMENT dans ./~/socket.io/lib/index.js
113:11-32 Dépendance critique : la demande d'une dépendance est une expression

ERREUR dans ./~/engine.io/lib/server.js
Module introuvable : erreur : impossible de résoudre 'uws' dans '/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 ! code ELIFECYCLE
npm ERR ! erreur no 2
npm ERR ! construction de [email protected] : webpack --config ./support/webpack.config.js
npm ERR ! Statut de sortie 2
npm ERR !
npm ERR ! Échec du script de construction [email protected] .
npm ERR ! Ce n'est probablement pas un problème avec npm. Il y a probablement une sortie de journalisation supplémentaire ci-dessus.

npm ERR ! Un journal complet de cette exécution peut être trouvé dans :
npm ERR ! /Users/ZehuaChen/.npm/_logs/2018-05-17T21_30_47_624Z-debug.log
````

Mettre à jour

J'installe le package uws manuellement et cela semble fonctionner. Quelqu'un peut-il mettre à jour le fichier README ou package.json car il est vraiment difficile pour un débutant comme moi de comprendre cela.

Commentaire le plus utile

Je viens donc d'avoir le même problème, mais pour une raison très différente. Actuellement, lorsque j'installe le dernier package de serveur socket.io de npm uws, je ne le trouve pas.

Cela se produit parce que l'éditeur de uws a récemment téléchargé un package vide supprimant tout le code réel D :

Vous pouvez résoudre ce problème en installant la dernière version non détruite

fil ajouter [email protected]
npm installer [email protected]

Lien vers le package vide/obsolète : https://www.npmjs.com/package/uws

Informations de fond perspicaces de reddit : https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

Je vais publier ceci dans les premiers résultats qui apparaissent lors de la recherche de ce problème car il m'a fallu un certain temps pour comprendre ce qui se passait et j'espère que cela fera gagner du temps à quelqu'un!

Tous les 20 commentaires

Je reçois également les mêmes avertissements:

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

Avez-vous réussi à le résoudre ? Vous avez le même problème..

Nan. Ce n'est qu'un avertissement, il n'y a donc aucun effet autre qu'une sortie de console laide, mais c'est toujours là.

Cela ne vous empêche pas de npm start , ignorez simplement l'erreur.

Si vous compilez uniquement pour node , vous devez ajouter l'option puis l'erreur disparaîtra.
Vous devez ajouter à votre fichier de configuration :

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

Sinon, vous compilez pour le web uniquement , aucune option n'a besoin d'être passée (default='web') (ou target='web') mais vous devez exclure 'uws' du bundle, car cela ne fonctionne pas dans le navigateur.
Dans ce cas, vous devriez plutôt ajouter :

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

@pirix-gh Cela ne semble pas être le problème.

Depuis ma config :

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, alors peut-être importez-vous un projet dans un autre ?

_Projet 1_

  • Index.js : Importer _Socket.IO_

_Projet_2_

  • Index.js : Importer _Project_1_

Webpack : Compiler le projet_2
-> Module introuvable dans Project_2

Et cela peut arriver parce que la dépendance est recherchée dans Project_2 mais que Project_1 la contient.
Une solution consiste à installer la dépendance manquante comme vous l'avez fait.
Ou publiez votre Project_1 puis importez-le en tant que dépendance dans Project_2.

En faisant cela, je suis en mesure de reproduire les erreurs que vous avez fournies ci-dessus

Merci d'avoir expliqué pourquoi cela s'est mal passé et d'avoir proposé une approche alternative !

@ Zehua-Chen Pleasure, j'espère que cela a résolu votre problème. Je sais à quel point ça peut être ennuyeux de publier tout le temps alors... Pour ce cas de projets fractionnés, vous pouvez utiliser lors de votre développement :

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

ou selon votre version

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

Il résoudra les dépendances correctement et exécutera , mais rappelez-vous qu'il ne convient pas à la production.
Si vous travaillez en production, vous devez publier vos packages séparément et utiliser npm à la place.

J'ai fait beaucoup de recherches maintenant et je n'ai toujours pas compris le problème et comment le résoudre.
J'ai un seul projet , j'utilise socket.io et la construction avec webpack échoue toujours avec le même problème.

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 c'est parce que vous ne devez pas regrouper vos dépendances lorsque vous travaillez avec node (sera installé avec package.json). C'est le comportement par défaut de webpack , car il regroupe votre projet pour le web .

Ajoutez ceci à votre conf, cela exclura vos dépendances en lisant votre package.json

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

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

De cette façon, vous obtiendrez (presque) un package publiable

@pirix-gh Merci ! D'accord, c'est logique. J'espérais pouvoir créer un ensemble complet qui doit simplement être poussé sur le serveur sans avoir besoin d'installer/de mettre à jour des modules via package.json. Je ne sais toujours pas si ce n'est vraiment pas possible, à l'exception de cette erreur avec socket.io, cela semble fonctionner.

@btxtiger Vous pouvez le faire localement. Ne le publiez pas sur NPM car il enfreint les règles de dépendance.
uws est compilé à la volée lors de l'utilisation npm i car il s'agit d'un module C++ enveloppé dans Node.js .
Il ne peut donc pas être regroupé comme js standard et doit plutôt être installé (ce qui déclenche la compilation pour votre système d'exploitation).
C'est pourquoi vous devez toujours utiliser le système de dépendance NPM , vous n'avez alors pas à vous poser cette question.

Si vous voulez toujours faire cela, essayez d'exclure uws :

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

@pirix-gh Super, merci beaucoup pour l'explication. Je suis passé à un package.json optimisé qui exclut toutes les dépendances de développement lors de la construction avec webpack et exécute toujours npm install avant de commencer. Cela semble être la meilleure solution pour le moment.

Je n'ai pas eu le temps de le déboguer complètement, mais lors de la mise à niveau de karma^2.0.0 à karma^3.0.0 , j'ai eu cette erreur sur ma version de webpack :

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

Donc, garder le Karma à 2.0.0 était la solution pour moi.

Je rencontre ce problème chaque fois que j'importe ou que j'ai besoin de socket.io. J'ai essayé d'installer manuellement uws et Node ne peut toujours pas résoudre uws.

J'ai également ce problème, je ne sais pas comment le résoudre.

Webpack / front-end folks, si vous avez juste besoin de SocketIO dans votre application côté client pour vous connecter à un serveur WebSocket, vous pouvez simplement utiliser ceci : https://github.com/socketio/socket.io-client

Résolu mon problème Module not found: Error: Can't resolve 'uws' !

Je viens donc d'avoir le même problème, mais pour une raison très différente. Actuellement, lorsque j'installe le dernier package de serveur socket.io de npm uws, je ne le trouve pas.

Cela se produit parce que l'éditeur de uws a récemment téléchargé un package vide supprimant tout le code réel D :

Vous pouvez résoudre ce problème en installant la dernière version non détruite

fil ajouter [email protected]
npm installer [email protected]

Lien vers le package vide/obsolète : https://www.npmjs.com/package/uws

Informations de fond perspicaces de reddit : https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

Je vais publier ceci dans les premiers résultats qui apparaissent lors de la recherche de ce problème car il m'a fallu un certain temps pour comprendre ce qui se passait et j'espère que cela fera gagner du temps à quelqu'un!

Pour moi, --target node sur la CLI ou la configuration était la clé et a résolu tous mes problèmes.

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