Socket.io: Não é possível resolver 'uws', atualizar o README ou "package.json"?

Criado em 17 mai. 2018  ·  20Comentários  ·  Fonte: socketio/socket.io

Observação : para perguntas de suporte, use um destes canais: stackoverflow ou slack

Você quer:

  • [x] reportar um bug
  • [ ] solicitar um recurso

Comportamento atual

Eu baixei o projeto de exemplo webpack-build-server do branch master do socket.io, executei npm install para instalar as dependências e, finalmente, executei npm run build para tentar empacotar o servidor, mas o webpack me dá o seguintes erros:

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

Etapas para reproduzir (se o comportamento atual for um bug)

  1. Baixe o branch master do socket.io
  2. Vá para examples/webpack-build-server ;
  3. Executar npm install ;
  4. Executar npm run build ;

Nota : a melhor maneira de obter uma resposta rápida é fornecer um caso de teste com falha, fazendo um fork do seguinte violino , por exemplo.

Comportamento esperado

Um arquivo server.js deve ser produzido na pasta dist .

Configuração

  • SO: macOS Hight Sierra
  • navegador: Safari
  • versão do socket.io: 2.0.3

Outras informações (por exemplo, stacktraces, problemas relacionados, sugestões de como corrigir)

Estes são o que está impresso no meu terminal

````

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

Hash: 997a1fd1ee0b1b064485
Versão: webpack 2.7.0
Tempo: 468ms
Nomes de pedaços de tamanho de ativo
server.js 401 kB 0 [emitido] [grande] principal
[0] ./~/debug/src/index.js 263 bytes {0} [construído]
[7] ./~/socket.io-parser/index.js 8,04 kB {0} [construído]
[16] ./~/engine.io/lib/socket.js 11,6 kB {0} [construído]
[17] ./~/engine.io/lib/transports/index.js 509 bytes {0} [construído]
[19] ./~/socket.io-parser/is-buffer.js 712 bytes {0} [construído]
[20] ./~/socket.io/lib/namespace.js 5,81 kB {0} [construído]
[31] ./~/socket.io/lib/index.js 12,9 kB {0} [construído]
[32] ./lib/index.js 474 bytes {0} [construído]
[43] ./~/engine.io/lib/engine.io.js 2,38 kB {0} [construído]
[44] ./~/engine.io/lib/server.js 15,1 kB {0} [construído]
[58] ./~/socket.io-adapter/index.js 5,44 kB {0} [construído]
[59] ./~/socket.io-client/package.json 3,19 kB {0} [construído]
[61] ./~/socket.io/lib 160 bytes {0} [construído]
[62] ./~/socket.io/lib/client.js 5,9 kB {0} [construído]
[63] ./~/socket.io/lib/parent-namespace.js 917 bytes {0} [construído]
+ 59 módulos ocultos

AVISO em ./~/ws/lib/Validation.js
Módulo não encontrado: Erro: Não é possível resolver 'utf-8-validate' em '/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

AVISO em ./~/ws/lib/BufferUtil.js
Módulo não encontrado: Erro: Não é possível resolver 'bufferutil' em '/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

AVISO em ./~/socket.io/lib/index.js
113:11-32 Dependência crítica: a solicitação de uma dependência é uma expressão

ERRO em ./~/engine.io/lib/server.js
Módulo não encontrado: Erro: Não é possível resolver 'uws' em '/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! código ELIFECYCLE
npm ERR! erro 2
npm ERR! [email protected] compilação: webpack --config ./support/webpack.config.js
npm ERR! Sair do estado 2
npm ERR!
npm ERR! Falha no script de compilação [email protected] .
npm ERR! Isso provavelmente não é um problema com o npm. Provavelmente há saída de log adicional acima.

npm ERR! Um log completo desta execução pode ser encontrado em:
npm ERR! /Users/ZehuaChen/.npm/_logs/2018-05-17T21_30_47_624Z-debug.log
````

Atualizar

Eu instalo o pacote uws manualmente e parece funcionar. Alguém pode atualizar o arquivo README ou package.json já que é muito difícil para um iniciante como eu descobrir isso.

Comentários muito úteis

Então, eu tive esse mesmo problema, mas por um motivo muito diferente. Atualmente, quando instalo o pacote de servidor socket.io mais recente do npm uws não será encontrado.

Isso está acontecendo porque o editor do uws carregou recentemente um pacote vazio excluindo todo o código real D:

Você pode corrigir isso instalando a última versão não destruída

fio adicionar [email protected]
npm install [email protected]

Link para pacote vazio / obsoleto: https://www.npmjs.com/package/uws

Informações de fundo perspicazes do reddit: https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

Vou postar isso nos primeiros resultados que aparecem ao pesquisar esse problema, pois demorei um pouco para descobrir o que estava acontecendo e espero que isso economize algum tempo para alguém!

Todos 20 comentários

Também estou recebendo os mesmos avisos:

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

Você conseguiu resolver? Tem o mesmo problema..

Não. É apenas um aviso, então não há nenhum efeito além da saída feia do console, mas ainda está lá.

Isso não impede você de npm start , apenas ignore o erro.

Se você estiver compilando apenas para node , você deve adicionar a opção e o erro desaparecerá.
Você deve adicionar ao seu arquivo de configuração:

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

Caso contrário, você está compilando apenas para web , então nenhuma opção precisa ser passada (default='web') (ou target='web'), mas você deve excluir 'uws' de ser empacotado, pois não funciona no navegador.
Neste caso, você deve adicionar:

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

@pirix-gh Este não parece ser o problema.

Da minha configuração:

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, então talvez você esteja importando um projeto para outro?

_Projeto 1_

  • Index.js: Importar _Socket.IO_

_Projeto_2_

  • Index.js: Importar _Project_1_

Webpack: Compile Project_2
-> Módulo não encontrado no Project_2

E isso pode acontecer porque a dependência é pesquisada no Project_2, mas o Project_1 a está segurando.
Uma solução para isso é instalar a dependência ausente como você fez.
Ou publique seu Project_1 e importe-o como uma dependência para o Project_2.

Ao fazer isso, posso reproduzir os erros que você forneceu acima

Obrigado por explicar por que deu errado e fornecer uma abordagem alternativa!

@Zehua-Chen Pleasure, espero que tenha resolvido seu problema. Eu sei o quão chato pode ser publicar o tempo todo, então... Para este caso de projetos divididos, você pode usar durante o seu desenvolvimento:

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

ou dependendo da sua versão

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

Ele resolverá as dependências corretamente e executará , mas lembre-se de que não é adequado para produção.
Se você estiver trabalhando em produção, publique seus pacotes separadamente e use o npm.

Eu fiz muita pesquisa agora e ainda não entendi o problema e como resolvê-lo.
Estou tendo um único projeto , usando socket.io e construindo com webpack sempre falha com o mesmo 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

pacote.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()
      ]
   }
};

@bttiger é porque você não deve agrupar suas dependências ao trabalhar com o nó (será instalado com o package.json). É o comportamento padrão para webpack , porque agrupa seu projeto para a web .

Adicione isso ao seu conf, ele excluirá suas dependências lendo seu package.json

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

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

Desta forma, você obterá (quase) um pacote publicável

@pirix-gh Obrigado! Ok, isso faz sentido. Eu esperava poder criar um pacote completo que só precisa ser enviado para o servidor sem a necessidade de instalar/atualizar módulos via package.json. Ainda não tenho certeza se isso realmente não é possível, exceto por esse erro com socket.io, parece funcionar.

@bttiger Você pode fazer isso localmente. Só não publique no NPM, pois quebra as regras de dependência.
uws é compilado em tempo real ao usar npm i porque é um módulo C++ encapsulado em Node.js .
Portanto, não pode ser empacotado como js padrão e deve ser instalado (o que aciona a compilação para o seu sistema operacional).
É por isso que você deve sempre usar o sistema de dependência do NPM , então você não precisa se fazer essa pergunta.

Se você ainda quiser fazer isso, tente excluir uws:

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

@pirix-gh Ótimo, muito obrigado pela explicação. Mudei para um package.json otimizado que exclui todas as dependências dev durante a compilação com o webpack e sempre executa o npm install antes de iniciar. Parece ser a melhor solução por enquanto.

Não tive tempo de depurá-lo completamente, mas ao atualizar de karma^2.0.0 para karma^3.0.0 recebi este erro na compilação do meu webpack:

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

Então, manter o Karma em 2.0.0 foi a solução para mim.

Estou recebendo esse problema sempre que importo ou exijo o socket.io. Eu tentei instalar manualmente o uws e o Node ainda não pode resolver o uws.

Também estou com esse problema, não sei como resolver.

Pessoal do Webpack / front-end, se você precisar apenas do SocketIO em seu aplicativo do lado do cliente para se conectar a algum servidor WebSocket, basta usar isso: https://github.com/socketio/socket.io-client

Resolvido meu problema Module not found: Error: Can't resolve 'uws' !

Então, eu tive esse mesmo problema, mas por um motivo muito diferente. Atualmente, quando instalo o pacote de servidor socket.io mais recente do npm uws não será encontrado.

Isso está acontecendo porque o editor do uws carregou recentemente um pacote vazio excluindo todo o código real D:

Você pode corrigir isso instalando a última versão não destruída

fio adicionar [email protected]
npm install [email protected]

Link para pacote vazio / obsoleto: https://www.npmjs.com/package/uws

Informações de fundo perspicazes do reddit: https://www.reddit.com/r/node/comments/91kgte/uws_has_been_deprecated/

Vou postar isso nos primeiros resultados que aparecem ao pesquisar esse problema, pois demorei um pouco para descobrir o que estava acontecendo e espero que isso economize algum tempo para alguém!

Para mim, --target node pela CLI ou configuração foi a chave e resolveu todos os meus problemas.

Esta página foi útil?
0 / 5 - 0 avaliações