Socket.io-client: [bug] global tidak ditentukan

Dibuat pada 24 Okt 2017  ·  49Komentar  ·  Sumber: socketio/socket.io-client

Catatan : untuk pertanyaan dukungan, silakan gunakan salah satu saluran ini: stackoverflow atau slack

Yang kamu ingin:

- [x] report a *bug*
- [ ] request a *feature*

Perilaku saat ini

socket.io-client tidak bekerja dengan @angular/ [email protected] karena ketergantungan pada node.js' global var
(sepertinya berasal dari [email protected] , tetapi saya tidak dapat menemukan siapa yang memelihara versi itu)

Langkah-langkah untuk mereproduksi (jika perilaku saat ini adalah bug)

lihat https://github.com/angular/angular-cli/issues/8160

Perilaku yang diharapkan

Mempersiapkan

  • OS:
  • peramban:
  • versi socket.io: 2.0.4

Komentar yang paling membantu

Menurut https://github.com/angular/angular-cli/issues/8160#issuecomment -386153833:

menambahkan polyfills.ts berikut ini akan berfungsi di Angular@6 :

// Add global to window, assigning the value of window itself.
(window as any).global = window;

Bagaimanapun, masalah ini tidak boleh diselesaikan IMO, socket.io-client harus menghapus ketergantungan implisit pada global , atau mendokumentasikan bahwa polyfill diperlukan (oleh siapa pun yang menggunakan sumber yang dibundel sebelumnya, bukan hanya Pengguna sudut)

(BTW dari mana sumber [email protected] terbaru? Mungkin saya bisa membantu)

Semua 49 komentar

Juga menghadapi masalah ini saat ini

Karena https://github.com/angular/angular-cli/issues/8160 sekarang telah diselesaikan, dapatkah kami menutup masalah ini? Terima kasih!

Saya rasa tidak, karena di angular/cli > 6 mereka secara permanen menghapus global.
Bisakah Anda mulai mencarinya lagi? https://github.com/angular/angular-cli/issues/9827

BR,
Kevin

Solusi hingga Angular CLI mungkin memperbaikinya atau memungkinkan untuk menimpa perintah node, maka Anda dapat menambahkan file ramping socket.io-client di bagian path dari tsconfig.app.json

"paths": {
      ....
      "socket.io-client": ["../node_modules/socket.io-client/dist/socket.io.slim.js"]
}

Bahkan jika saat ini berfungsi, menurut https://github.com/angular/angular-cli/issues/9827#issuecomment -369578814 , ini akan menjadi masalah di Angular@6 :

"[ini] umumnya hanya membuat situasi di mana kode browser yang seharusnya tidak berfungsi sama sekali hanya berfungsi ketika dibangun dengan alat yang sangat spesifik. Ini bukan situasi yang baik."

Saya mengkonfirmasi itu rusak di Angular 6 RC5. Apakah ada yang tahu solusi?

@ngervasi kami telah melakukannya dengan melakukan seperti yang saya komentari di sini: https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639

Saya mencoba:

{ "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"] } }

tetapi tidak berfungsi di Angular 6RC5, saya masih mendapatkan kesalahan:

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)

Menurut https://github.com/angular/angular-cli/issues/8160#issuecomment -386153833:

menambahkan polyfills.ts berikut ini akan berfungsi di Angular@6 :

// Add global to window, assigning the value of window itself.
(window as any).global = window;

Bagaimanapun, masalah ini tidak boleh diselesaikan IMO, socket.io-client harus menghapus ketergantungan implisit pada global , atau mendokumentasikan bahwa polyfill diperlukan (oleh siapa pun yang menggunakan sumber yang dibundel sebelumnya, bukan hanya Pengguna sudut)

(BTW dari mana sumber [email protected] terbaru? Mungkin saya bisa membantu)

Perbaikan mana yang lebih baik? https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639 (menambahkan ke jalur di tsconfig) atau https://github.com/socketio/socket.io-client/issues/1166 #issuecomment -386195105 (menetapkan ke global)?

Kedua opsi berfungsi untuk saya di proyek Angular v6 yang dihasilkan dengan Angular CLI.

@amitport sumber untuk paket has-binary2 ada di sini: https://github.com/darrachequesne/has-binary

Meskipun aku khawatir itu bukan satu-satunya kejadian.

@darrenmothersele tidak berpikir ada yang "lebih baik". Menambahkan 'global' mungkin memiliki efek samping untuk lib lain sementara menambahkan file 'slim' mungkin memiliki efek negatif pada ukuran bundel (belum tentu)

@darrachequesne menambahkan PR https://github.com/darrachequesne/has-binary/pull/4 (ini permulaan :))

Saya mencoba kedua solusi dan dengan proyek sudut 6.0.0 saat ini dan tidak ada yang berhasil. Saya menambahkan entri jalur ke tsconfig.app.json dan entri ke polyfills.ts tetapi masih mendapatkan kesalahan yang sama di chrome.

sama di sini, solusi tsconfig tidak berfungsi pada ng cli 6

// Tambahkan global ke jendela, menetapkan nilai jendela itu sendiri.
(jendela apa saja).global = jendela;

bekerja untuk saya
Terima kasih.

Bekerja untuk saya juga! Terima kasih!

Ini bekerja untuk saya juga! Terima kasih banyak ! :D

di mana Anda meletakkan (window as any).global = window; ?
Terima kasih.

Halo,

Tepat di sana (pada gambar).

17-05-2018 21:07 GMT+02:00 Alberto Basaglia [email protected] :

di mana Anda meletakkan (jendela apa saja).global = jendela; ?
Terima kasih.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-389975067 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/APZTlGpMwMpnAscifHT2ZQrRUSJqLejCks5tzcp3gaJpZM4QD_kq
.

--

Arnaud Tussy-Vassilieff
Développeur web full-stack chez Leaf Website

Situs web: www.leaf-website.esy.es http://www.leaf-website.esy.es
Surat : a.tussy.
Telp : 07 77 83 29 44

dimana kamu meletakkan...

Taruh ini di polyfills.ts Anda

(window as any).global = window

antara baris 63 dan 70

2018-05-31 18:31 GMT+02:00 Bibhas Bhattacharya [email protected] :

dimana kamu meletakkan...

Letakkan ini di polyfills.ts . Anda

(jendela apa saja).global = jendela


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-393592879 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/APZTlPci9GKE3R8lwc1g3qfqWODeXIPiks5t4Br1gaJpZM4QD_kq
.

--

Arnaud Tussy-Vassilieff
Développeur web full-stack chez Leaf Website

Situs web: www.leaf-website.esy.es http://www.leaf-website.esy.es
Surat : a.tussy.
Telp : 07 77 83 29 44

@amitport terima kasih solusi yang Anda berikan berhasil!! @AngularTeam , Kenapa kamu terus merusak semuanya guys :/ kamu bahkan berhasil memasukkan orang-orangmu ke dalam tim rxjs dan tiba-tiba bahkan rxjs merusak semuanya sekarang dengan perubahan versi... kemampuan untuk memecahkan segala sesuatu pada setiap rilis.

@LucasFrecia ini masalah socket.io bukan masalah Angular. Angular melakukannya dengan baik dengan berhenti untuk menyembunyikannya di versi 6 (yang ditandai sebagai rilis utama)

Menambahkan permintaan tarik lain dua minggu lalu https://github.com/webmodules/blob/pull/14 untuk https://github.com/webmodules/blob (digunakan oleh engine.io-parser).

Tidak mendapat tanggapan, siapa pun di sini dapat menggabungkannya? @darrachequesne @rauchg @nkzawa?

Menambahkan (window as any).global = window; ke polyfills.ts bekerja untuk saya

@amitport tks.
Ini berfungsi dengan baik

Saya meletakkan jendela (window as any).global = di file polyfills.ts
Itu tidak memberikan ReferenceError: global is not defined di localhost tetapi memberikan kesalahan ini jika saya mencoba menjalankan build produksi dengan http-server untuk tujuan pengujian.
Adakah petunjuk seperti mengapa ini terjadi?
Ini sangat mendesak!

Hai @gupta82anish ,
Saya memasukkan (window as any).global = window; dalam file pollyfills.ts dan menjalankan proyek di localhost (pengembangan) serta membangunnya untuk produksi dan tidak mendapatkan kesalahan.
Itu bekerja seperti pesona.

Solusi (window as any).global = window; di pollyfills.ts tampaknya bekerja untuk saya di inti sudut 6.1.0. Semoga socket.io segera update..

(jendela apa saja).global = jendela; di pollyfills.ts bekerja untuk saya juga!!

(window as any).global = window;
Itu solusi yang sangat rapi. Tetapi apakah itu cara yang benar dalam melakukan sesuatu?

@avinexus7 itu bukan cara yang benar dalam melakukan sesuatu. Ini adalah solusi untuk masalah terbuka di socket.io-client : penggunaan objek 'global', yang tidak ada di browser.

(AFAIK, tidak ada yang berusaha memecahkan masalah ini, lihat diabaikan: https://github.com/socketio/engine.io-parser/issues/99 dan https://github.com/webmodules/blob/pull /14)

@amitport bisakah Anda menghubungi dukungan NPM, sehingga mereka memberi Anda hak untuk menerbitkan versi baru dari paket blob ?

@darrachequesne - selesai, saya telah mengirimkan permintaan ke NPM

(window as any).global = window
atau
(window as any) = window
tambahkan kode di atas ke dalam file polyfills.ts .

Menurut angular/angular-cli#8160 (komentar) :

menambahkan polyfills.ts berikut ini akan berfungsi di Angular@6 :

// Add global to window, assigning the value of window itself.
(window as any).global = window;

Bagaimanapun, masalah ini tidak boleh diselesaikan IMO, socket.io-client harus menghapus ketergantungan implisit pada global , atau mendokumentasikan bahwa polyfill diperlukan (oleh siapa pun yang menggunakan sumber yang dibundel sebelumnya, bukan hanya Pengguna sudut)

(BTW dari mana sumber [email protected] terbaru? Mungkin saya bisa membantu)

Ya, ini bekerja untuk saya juga.. Terima kasih

dimana kamu meletakkan...

Taruh ini di polyfills.ts Anda

(window as any).global = window

@bibhas2 Hebat! bekerja untuk saya

mungkin diperbaiki sekarang karena https://github.com/socketio/engine.io-parser/releases/tag/2.1.3 dirilis (menginstal ulang socket.io-client tanpa paket-lock mungkin diperlukan)

tidak bekerja dengan
mesin. [email protected]
soket. [email protected]

@kartikupadhyay90 dapatkah Anda menambahkan detail?

setelah memutakhirkan ke 2.2.0 di aplikasi ReactNative saya, instance socket.io saya tidak mendapatkan pemberitahuan dari server. Harus menurunkan versi ke 2.1.1

@alimek apakah Anda yakin bug Anda terkait dengan masalah ini? begitu tolong tambahkan detailnya. Jika tidak, silakan posting masalah baru

@amitport jika itu satu-satunya perubahan antara versi sebelumnya dan 2.2.0, maka saya kira begitu

@alimek ulangi: jika bug Anda _sama_ dengan yang ini, tambahkan detailnya. Jika tidak, silakan buka masalah baru (yang mungkin merupakan regresi).

(BTW, saya bukan pengelola lib ini, saya hanya berkomentar tentang cara kerja penanganan masalah secara umum. Jika Anda ingin masalah Anda diatasi, Anda perlu menambahkan detail yang dapat ditindaklanjuti dan mempostingnya dengan tepat)

Dalam situasi saya, sepertinya 2.2.0 bergantung pada "engine.io-client": "~3.3.1", yang bergantung pada "engine.io-parser": "~2.1.1". Namun engine.io-parser di sistem saya tampaknya 2.1.2 yang masih berisi referensi ke variabel 'global'. Sepertinya ini telah diperbaiki di 2.1.3, tetapi npm saya sepertinya menarik 2.1.2

Jika saya harus menebak, sepertinya akan kembali ke 2.1.2 karena build terakhir untuk 2.1.3 gagal
https://travis-ci.org/socketio/engine.io-parser

Selain itu, saya tidak tahu mengapa itu terus menarik versi yang lebih lama untuk saya

Saya memiliki masalah yang sama dengan Jest + React + TypeScript, dan tidak dapat memperbaikinya dengan pengaturan (window as any).global = window . Saya mencoba memasukkan kode ke dalam file polyfills.ts juga,

setupFiles: [
    '<rootDir>/tst/polyfills.ts',
    '<rootDir>/tst/jest.setup.ts',
  ],

dan juga menggunakan metode defineProperty Jest, tetapi masih belum berhasil.

Object.defineProperty((window as any), 'global', {});

copyProps(window, global);

Adakah yang bisa menyelesaikan ini untuk Jest, atau tahu bagaimana saya bisa membuatnya bekerja? @amitport ada ide?

Terima kasih,

@eldem dan lainnya. Saya menutup ini karena utas ini menjadi campuran umum dari masalah yang mungkin tidak terkait. Jika ada yang melihat masalah yang berkaitan dengan global dan socket.io-client, silakan buka masalah baru dengan instruksi reproduksi, kesalahan yang ditampilkan di konsol, versi yang digunakan, dll.,.

Bekerja dengan Ionic4/Angular7 - menginstal 2.1.1 dan menambahkan (window as any).global = window di \srcpolyfills.ts berhasil - Terima kasih!

Untuk pertanyaan saya di atas: Babel menyebabkan kesalahan saat mengubah file socket.io. Menambahkannya di transformIgnore berhasil untuk saya.

transformIgnorePatterns: [
    '<rootDir>/node_modules/../lib/socket.io.js'
  ]

@amitport metode bekerja dengan sempurna

Apakah halaman ini membantu?
0 / 5 - 0 peringkat