Observação : para perguntas de suporte, use um destes canais: stackoverflow ou slack
- [x] report a *bug*
- [ ] request a *feature*
socket.io-client não funciona com @angular/[email protected] rc.3 devido a uma dependência de global
var do node.js
(parece vir de [email protected]
, mas não consigo encontrar quem mantém essas versões)
veja https://github.com/angular/angular-cli/issues/8160
2.0.4
Também enfrentando esse problema atualmente
Como https://github.com/angular/angular-cli/issues/8160 está resolvido, podemos fechar esse problema? Obrigado!
Acho que não, porque no angular/cli > 6 eles removeram permanentemente global.
Você pode, por favor, começar a investigar isso de novo? https://github.com/angular/angular-cli/issues/9827
BR,
Kevin
Uma solução alternativa até que o Angular CLI talvez o corrija ou possibilite substituir o comando node, então você pode adicionar o arquivo slim socket.io-client na seção paths do tsconfig.app.json
"paths": {
....
"socket.io-client": ["../node_modules/socket.io-client/dist/socket.io.slim.js"]
}
Mesmo que funcione atualmente, de acordo com https://github.com/angular/angular-cli/issues/9827#issuecomment -369578814, isso será um problema em Angular@6
:
"[isso] geralmente cria uma situação em que o código do navegador que não deveria funcionar funciona apenas quando integrado com ferramentas muito específicas. Esta não é uma boa situação."
Confirmo que está quebrado em Angular 6 RC5. Alguém conhece uma solução alternativa?
@ngervasi fizemos isso fazendo como eu comentei aqui: https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639
Tentei:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "es2015",
"baseUrl": "",
"types": []
},
"exclude": [
"test.ts",
"**/*.spec.ts"
],
"paths": {
"socket.io-client": ["../node_modules/socket.io-client/dist/socket.io.slim.js"]
}
}
mas não está funcionando no Angular 6RC5, ainda recebo o erro:
is-buffer.js:4 Uncaught ReferenceError: global is not defined
at Object../node_modules/socket.io-client/node_modules/socket.io-parser/is-buffer.js (is-buffer.js:4)
at __webpack_require__ (bootstrap:74)
at Object../node_modules/socket.io-client/node_modules/socket.io-parser/binary.js (binary.js:8)
at __webpack_require__ (bootstrap:74)
at Object../node_modules/socket.io-client/node_modules/socket.io-parser/index.js (index.js:8)
at __webpack_require__ (bootstrap:74)
at Object../node_modules/socket.io-client/lib/index.js (index.js:7)
at __webpack_require__ (bootstrap:74)
at Object../src/app/_services/websocket.service.ts (log.service.ts:5)
at __webpack_require__ (bootstrap:74)
De acordo com https://github.com/angular/angular-cli/issues/8160#issuecomment -386153833:
adicionar o seguinte polyfills.ts
deve funcionar em Angular@6
:
// Add global to window, assigning the value of window itself.
(window as any).global = window;
De qualquer forma, esse problema não deve ser resolvido IMO, socket.io-client deve remover a dependência implícita em global
, ou documentar que um polyfill é necessário (por qualquer pessoa que use as fontes pré-empacotadas, não apenas usuários angulares)
(BTW, onde estão as fontes dos últimos [email protected]
? talvez eu possa ajudar)
Qual é a melhor correção? https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639 (adicionando caminhos em tsconfig) ou https://github.com/socketio/socket.io-client/issues/1166 #issuecomment -386195105 (atribuindo a global)?
Ambas as opções funcionaram para mim no projeto Angular v6 gerado com Angular CLI.
@amitport as fontes do pacote has-binary2
estão aqui: https://github.com/darrachequesne/has-binary
Embora eu tenha medo que não seja a única ocorrência.
@darrenmothersele não acha que existe exatamente um "melhor". Adicionar 'global' pode ter efeitos colaterais para outras bibliotecas, enquanto adicionar o arquivo 'slim' pode ter um efeito negativo no tamanho do pacote (não necessariamente)
@darrachequesne adicionou um PR https://github.com/darrachequesne/has-binary/pull/4 (é um começo :))
Eu tentei as duas soluções e com um projeto angular 6.0.0 atual e nenhuma funciona. Eu adicionei a entrada de caminhos ao tsconfig.app.json e a entrada ao polyfills.ts, mas ainda recebendo o mesmo erro no chrome.
mesmo aqui, a solução tsconfig não funciona em ng cli 6
// Adiciona global à janela, atribuindo o valor da própria janela.
(janela como qualquer).global = window;
está trabalhando para mim
Obrigado.
Funciona para mim também! Obrigado!
Funciona pra mim também ! Muito obrigado ! :D
onde você colocou (window as any).global = window;
?
Obrigado.
Olá,
Bem ali (na foto).
2018-05-17 21:07 GMT+02:00 Alberto Basaglia [email protected] :
onde você colocou (janela como qualquer).global = window; ?
Obrigado.—
Você está recebendo isso porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-389975067 ,
ou silenciar o thread
https://github.com/notifications/unsubscribe-auth/APZTlGpMwMpnAscifHT2ZQrRUSJqLejCks5tzcp3gaJpZM4QD_kq
.
--
Arnaud Tussy-Vassilieff
Developpeur web full-stack chez Leaf Websites
Site web: www.leaf-website.esy.es http://www.leaf-website.esy.es
Correio: a.tussy.
Telefone: 07 77 83 29 44
onde você colocou...
Coloque isso em seu polyfills.ts
(window as any).global = window
entre a linha 63 e 70
31/05/2018 18:31 GMT+02:00 Bibhas Bhattacharya [email protected] :
onde você colocou...
Coloque isso em seu polyfills.ts
(janela como qualquer).global = janela
—
Você está recebendo isso porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-393592879 ,
ou silenciar o thread
https://github.com/notifications/unsubscribe-auth/APZTlPci9GKE3R8lwc1g3qfqWODeXIPiks5t4Br1gaJpZM4QD_kq
.
--
Arnaud Tussy-Vassilieff
Developpeur web full-stack chez Leaf Websites
Site web: www.leaf-website.esy.es http://www.leaf-website.esy.es
Correio: a.tussy.
Telefone: 07 77 83 29 44
@amitport agradece a solução que você forneceu funciona !! @AngularTeam , Como é que você continua quebrando tudo pessoal :/ você até conseguiu colocar seu pessoal na equipe rxjs e de repente até o rxjs quebra tudo agora nas mudanças de versão ... capacidade de quebrar tudo em cada lançamento.
@LucasFrecia é um problema do socket.io e não do Angular. Angular fez bem ao parar de escondê-lo na versão 6 (que é marcada como um grande lançamento de última hora)
Adicionada outra solicitação de pull há duas semanas https://github.com/webmodules/blob/pull/14 para https://github.com/webmodules/blob (usado por engine.io-parser).
Não está recebendo nenhuma resposta, alguém aqui pode mesclá-lo? @darrachequesne @rauchg @nkzawa?
Adicionando a (janela como qualquer).global = window; para o polyfills.ts funcionou para mim
@amitport tks.
Funciona bem
Eu coloquei a (janela como qualquer).global = janela no arquivo polyfills.ts
Ele não fornece o ReferenceError: global is not defined
no host local, mas dá esse erro se eu tentar executar a compilação de produção com o servidor http para fins de teste.
Alguma pista de por que isso está acontecendo?
É super urgente!
Olá @gupta82anish ,
Coloquei (window as any).global = window;
no arquivo pollyfills.ts
e executei o projeto em localhost (desenvolvimento), além de construí-lo para produção e não recebi nenhum erro.
Funcionou como um encanto.
A solução alternativa (window as any).global = window;
em pollyfills.ts
parece funcionar para mim no núcleo angular 6.1.0. Vamos torcer para que o socket.io seja atualizado em breve.
(janela como qualquer).global = window; em pollyfills.ts funcionou para mim também!!
(window as any).global = window;
Essa é uma solução muito legal. Mas será que é a maneira correta de fazer as coisas?
@avinexus7 não é a maneira certa de fazer as coisas. É uma solução para um problema em aberto em socket.io-client
: o uso do objeto 'global', que não existe em navegadores.
(AFAIK, ninguém está se esforçando para resolver esse problema, veja ignorado: https://github.com/socketio/engine.io-parser/issues/99 e https://github.com/webmodules/blob/pull /14)
@amitport você poderia entrar em contato com o suporte do NPM, para que eles concedam a você os direitos de publicar uma nova versão do pacote blob
?
@darrachequesne - pronto, enviei uma solicitação ao NPM
(window as any).global = window
ou
(window as any) = window
adicione o código acima no arquivo polyfills.ts
.
De acordo com angular/angular-cli#8160 (comentário) :
adicionar o seguinte
polyfills.ts
deve funcionar emAngular@6
:// Add global to window, assigning the value of window itself. (window as any).global = window;
De qualquer forma, esse problema não deve ser resolvido IMO, socket.io-client deve remover a dependência implícita em
global
, ou documentar que um polyfill é necessário (por qualquer pessoa que use as fontes pré-empacotadas, não apenas usuários angulares)(BTW, onde estão as fontes dos últimos
[email protected]
? talvez eu possa ajudar)
Sim, isso funcionou para mim também .. Obrigado
onde você colocou...
Coloque isso em seu
polyfills.ts
(window as any).global = window
@bibhas2 Ótimo! trabalhou para mim
possivelmente corrigido agora que https://github.com/socketio/engine.io-parser/releases/tag/2.1.3 foi lançado (pode ser necessário reinstalar o socket.io-client sem package-lock)
não trabalhando com
├─ motor. [email protected]
└─ soquete. [email protected]
@kartikupadhyay90 você pode adicionar detalhes?
depois de atualizar para 2.2.0
no meu aplicativo ReactNative, minha instância do socket.io não está recebendo notificação do servidor. Tive que fazer downgrade para 2.1.1
@alimek você tem certeza de que seu bug está relacionado a esse problema? é assim, por favor, adicione detalhes. Caso contrário, poste um novo problema
@amitport se essa for a única mudança entre a versão anterior e 2.2.0, então acho que sim
@alimek reformule: se o seu bug for _o mesmo_ que este, adicione detalhes. Caso contrário, abra um novo problema (que pode ser uma regressão).
(BTW, eu não sou um mantenedor desta lib, estou apenas comentando sobre como o tratamento de problemas funciona em geral. Se você deseja que seu problema seja resolvido, você precisa adicionar detalhes acionáveis e publicá-lo adequadamente)
Na minha situação, parece que 2.2.0 depende de "engine.io-client": "~3.3.1", que depende de "engine.io-parser": "~2.1.1". No entanto, o analisador engine.io no meu sistema parece ser 2.1.2, que ainda contém referências à variável 'global'. Parece que isso foi corrigido em 2.1.3, mas o npm i parece estar puxando 2.1.2
Se eu tivesse que adivinhar, parece que pode estar voltando para 2.1.2 porque a última compilação para 2.1.3 falhou
https://travis-ci.org/socketio/engine.io-parser
Além disso, não consigo descobrir por que ele continua puxando a versão mais antiga para mim
Eu tenho o mesmo problema com Jest + React + Typescript e não consegui corrigi-lo configurando (window as any).global = window
. Eu tentei colocar o código em um arquivo polyfills.ts
também,
setupFiles: [
'<rootDir>/tst/polyfills.ts',
'<rootDir>/tst/jest.setup.ts',
],
e também usando o método defineProperty do Jest, mas ainda sem sorte.
Object.defineProperty((window as any), 'global', {});
copyProps(window, global);
Alguém capaz de resolver isso para o Jest, ou sabe como posso fazer isso funcionar? @amitport alguma ideia?
Obrigado,
@eldem e outros. Estou fechando isso porque este tópico se tornou uma mistura genérica de problemas possivelmente não relacionados. Se alguém encontrar um problema relacionado ao global e ao socket.io-client, por favor abra um novo problema com instruções de reprodução, erros mostrados no console, versões usadas, etc.,.
Trabalhando com Ionic4/Angular7 - instalando 2.1.1 e adicionando (window as any).global = window
em \srcpolyfills.ts funcionou - Obrigado!
Para minha pergunta acima: Babel estava causando o erro ao transformar o arquivo socket.io. Adicioná-lo no transformIgnore funcionou para mim.
transformIgnorePatterns: [
'<rootDir>/node_modules/../lib/socket.io.js'
]
@amitport methode funciona perfeitamente
Comentários muito úteis
De acordo com https://github.com/angular/angular-cli/issues/8160#issuecomment -386153833:
adicionar o seguinte
polyfills.ts
deve funcionar emAngular@6
:De qualquer forma, esse problema não deve ser resolvido IMO, socket.io-client deve remover a dependência implícita em
global
, ou documentar que um polyfill é necessário (por qualquer pessoa que use as fontes pré-empacotadas, não apenas usuários angulares)(BTW, onde estão as fontes dos últimos
[email protected]
? talvez eu possa ajudar)