Socket.io: ¿No se puede resolver 'uws', actualizar README o "package.json"?

Creado en 17 may. 2018  ·  20Comentarios  ·  Fuente: socketio/socket.io

Nota : para preguntas de soporte, utilice uno de estos canales: stackoverflow o slack

Tú quieres:

  • [x] informar de un error
  • [ ] solicitar una función

Comportamiento actual

Descargué el proyecto de ejemplo webpack-build-server de la rama maestra de socket.io, ejecuté npm install para instalar las dependencias y finalmente ejecuté npm run build para intentar agrupar el servidor, pero webpack me da la siguientes errores:

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

Pasos para reproducir (si el comportamiento actual es un error)

  1. Descarga la rama maestra de socket.io
  2. Ir a examples/webpack-build-server ;
  3. Ejecutar npm install ;
  4. Ejecutar npm run build ;

Nota : la mejor manera de obtener una respuesta rápida es proporcionar un caso de prueba fallido, bifurcando el siguiente violín , por ejemplo.

Comportamiento esperado

Se debe generar un archivo server.js en la carpeta dist .

Configuración

  • Sistema operativo: macOS Hight SIerra
  • navegador: Safari
  • versión socket.io: 2.0.3

Otra información (p. ej., stacktraces, problemas relacionados, sugerencias sobre cómo solucionarlos)

Estos son los que están impresos en mi terminal

````

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

Hachís: 997a1fd1ee0b1b064485
Versión: paquete web 2.7.0
Tiempo: 468ms
Nombres de fragmentos de tamaño de activos
server.js 401 kB 0 [emitido] [grande] principal
[0] ./~/debug/src/index.js 263 bytes {0} [construido]
[7] ./~/socket.io-parser/index.js 8,04 kB {0} [construido]
[16] ./~/engine.io/lib/socket.js 11,6 kB {0} [construido]
[17] ./~/engine.io/lib/transports/index.js 509 bytes {0} [construido]
[19] ./~/socket.io-parser/is-buffer.js 712 bytes {0} [construido]
[20] ./~/socket.io/lib/namespace.js 5,81 kB {0} [construido]
[31] ./~/socket.io/lib/index.js 12,9 kB {0} [construido]
[32] ./lib/index.js 474 bytes {0} [construido]
[43] ./~/engine.io/lib/engine.io.js 2,38 kB {0} [construido]
[44] ./~/engine.io/lib/server.js 15,1 kB {0} [construido]
[58] ./~/socket.io-adapter/index.js 5,44 kB {0} [construido]
[59] ./~/socket.io-client/package.json 3,19 kB {0} [construido]
[61] ./~/socket.io/lib 160 bytes {0} [construido]
[62] ./~/socket.io/lib/client.js 5,9 kB {0} [construido]
[63] ./~/socket.io/lib/parent-namespace.js 917 bytes {0} [construido]
+ 59 módulos ocultos

ADVERTENCIA en ./~/ws/lib/Validation.js
Módulo no encontrado: Error: No se puede resolver 'utf-8-validate' en '/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/ws/lib'
@ ./~/ws/lib/Validation.js 10:22-47
@ ./~/ws/lib/Receptor.js
@ ./~/ws/index.js
@ ./~/engine.io/lib/server.js
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js

ADVERTENCIA en ./~/ws/lib/BufferUtil.js
Módulo no encontrado: Error: no se puede resolver 'bufferutil' en '/Users/ZehuaChen/Downloads/socket.io-master/examples/webpack-build-server/node_modules/ws/lib'
@ ./~/ws/lib/BufferUtil.js 35:21-42
@ ./~/ws/lib/Receptor.js
@ ./~/ws/index.js
@ ./~/engine.io/lib/server.js
@ ./~/engine.io/lib/engine.io.js
@ ./~/socket.io/lib/index.js
@ ./lib/index.js

ADVERTENCIA en ./~/socket.io/lib/index.js
113:11-32 Dependencia crítica: la petición de una dependencia es una expresión

ERROR en ./~/engine.io/lib/server.js
Módulo no encontrado: Error: no se puede resolver 'uws' en '/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 ¡ERROR! código ELIFECICLO
npm ¡ERROR! error 2
npm ¡ERROR! compilación [email protected] : webpack --config ./support/webpack.config.js
npm ¡ERROR! Estado de salida 2
npm ¡ERROR!
npm ¡ERROR! Error en el script de compilación [email protected] .
npm ¡ERROR! Esto probablemente no sea un problema con npm. Es probable que haya una salida de registro adicional arriba.

npm ¡ERROR! Un registro completo de esta ejecución se puede encontrar en:
npm ¡ERROR! /Usuarios/ZehuaChen/.npm/_logs/2018-05-17T21_30_47_624Z-debug.log
````

Actualizar

Instalo el paquete uws manualmente y parece funcionar. ¿Alguien puede actualizar el archivo README o package.json ya que es muy difícil para un principiante como yo resolver esto?

Comentario más útil

Así que acabo de tener este mismo problema, pero por una razón muy diferente. Actualmente, cuando instalo el último paquete de servidor socket.io de npm uws, no se encuentra.

Esto sucede porque el editor de uws cargó recientemente un paquete vacío que eliminó todo el código real D:

Puede solucionar esto instalando la última versión no destruida

añadir hilo [email protected]
npm instalar [email protected]

Enlace al paquete vacío/obsoleto: https://www.npmjs.com/package/uws

Información detallada de antecedentes de reddit: https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

¡Voy a publicar esto en los primeros resultados que aparecen al buscar este problema, ya que me llevó un tiempo descubrir qué pasaba y espero que esto le ahorre tiempo a alguien!

Todos 20 comentarios

También recibo las mismas advertencias:

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

¿Conseguiste solucionarlo? Tiene el mismo problema..

No. Es solo una advertencia, por lo que no hay otro efecto que la salida fea de la consola, pero todavía está allí.

No te impide npm start , simplemente ignora el error.

Si está compilando solo para el nodo , debe agregar la opción y el error desaparecerá.
Debe agregar a su archivo de configuración:

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

De lo contrario, está compilando solo para la web , entonces no es necesario pasar ninguna opción (predeterminado = 'web') (o destino = 'web'), pero debe excluir 'uws' del paquete, ya que no funciona en el navegador.
En este caso, deberías agregar:

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

@ pirix-gh Este no parece ser el problema.

Desde mi configuración:

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, entonces, ¿quizás estés importando un proyecto a otro?

_Proyecto 1_

  • Index.js: Importar _Socket.IO_

_Proyecto_2_

  • Index.js: Importar _Proyecto_1_

Paquete web: Compilar Project_2
-> Módulo no encontrado en Project_2

Y esto puede suceder porque la dependencia se busca en Project_2 pero Project_1 la mantiene.
Una solución a esto es instalar la dependencia que falta como lo hizo.
O publique su Project_1 y luego impórtelo como una dependencia en Project_2.

Al hacer esto, puedo reproducir los errores que proporcionó anteriormente

¡Gracias por explicar por qué salió mal y proporcionar un enfoque alternativo!

@Zehua-Chen Un placer, espero que haya solucionado su problema. Sé lo molesto que puede ser publicar todo el tiempo, así que... Para este caso de proyectos divididos, puedes usar durante tu desarrollo:

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

o dependiendo de tu versión

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

Resolverá las dependencias correctamente y se ejecutará , pero recuerde que no es adecuado para la producción.
Si está trabajando en producción, debe publicar sus paquetes por separado y usar npm en su lugar.

Investigué mucho ahora y todavía no entendía el problema y cómo resolverlo.
Tengo un solo proyecto , uso socket.io y compilar con webpack siempre falla con el mismo problema.

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

paquete.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 es porque no debe agrupar sus dependencias cuando trabaja con el nodo (se instalará con package.json). Es el comportamiento predeterminado para webpack , porque agrupa su proyecto para la web .

Agregue esto a su conf, excluirá sus dependencias al leer su paquete.json

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

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

De esta manera obtendrá (casi) un paquete publicable

@pirix-gh ¡Gracias! Bien, eso tiene sentido. Esperaba poder crear un paquete completo que solo necesita ser enviado al servidor sin necesidad de instalar/actualizar módulos a través de package.json. Todavía no estoy seguro de si esto realmente no es posible, excepto por ese error con socket.io, parece funcionar.

@btxtiger Puedes hacerlo localmente. Simplemente no lo publique en NPM ya que rompe las reglas de dependencia.
uws se compila sobre la marcha cuando se usa npm i porque es un módulo de C++ envuelto en Node.js.
Por lo tanto, no se puede agrupar como js estándar y debe instalarse (lo que activa la compilación para su sistema operativo).
Es por eso que siempre debe usar el sistema de dependencia NPM , entonces no tiene que hacerse esa pregunta.

Si aún desea hacer esto, intente excluir uws:

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

@pirix-gh Genial, muchas gracias por la explicación. Me mudé a un paquete.json optimizado que excluye todas las dependencias de desarrollo mientras construía con webpack, y siempre ejecuta npm install antes de comenzar. Parece ser la mejor solución por ahora.

No tuve tiempo de depurarlo por completo, pero cuando actualicé de karma^2.0.0 a karma^3.0.0 , recibí este error en la compilación de mi paquete web:

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

Así que mantener Karma en 2.0.0 fue la solución para mí.

Recibo este problema cada vez que importo o requiero socket.io. Intenté instalar manualmente uws y Node aún no puede resolver uws.

También tengo este problema, no tengo claro cómo resolverlo.

Webpack / gente de front-end, si solo necesita SocketIO en su aplicación del lado del cliente para conectarse a algún servidor WebSocket, puede usar esto: https://github.com/socketio/socket.io-client

¡Resolvió mi problema Module not found: Error: Can't resolve 'uws' !

Así que acabo de tener este mismo problema, pero por una razón muy diferente. Actualmente, cuando instalo el último paquete de servidor socket.io de npm uws, no se encuentra.

Esto sucede porque el editor de uws cargó recientemente un paquete vacío que eliminó todo el código real D:

Puede solucionar esto instalando la última versión no destruida

añadir hilo [email protected]
npm instalar [email protected]

Enlace al paquete vacío/obsoleto: https://www.npmjs.com/package/uws

Información detallada de antecedentes de reddit: https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

¡Voy a publicar esto en los primeros resultados que aparecen al buscar este problema, ya que me llevó un tiempo descubrir qué pasaba y espero que esto le ahorre tiempo a alguien!

Para mí, --target node sobre la CLI o la configuración fue la clave y resolvió todos mis problemas.

¿Fue útil esta página
0 / 5 - 0 calificaciones