Observação : para perguntas de suporte, use um destes canais: stackoverflow ou slack
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
examples/webpack-build-server
;npm install
;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.
Um arquivo server.js deve ser produzido na pasta dist
.
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
````
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.
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_
_Projeto_2_
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.
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!