Socket.io-client: لم يتم تعريف [خطأ] عالمي

تم إنشاؤها على ٢٤ أكتوبر ٢٠١٧  ·  49تعليقات  ·  مصدر: socketio/socket.io-client

ملاحظة : لأسئلة الدعم ، يرجى استخدام إحدى هذه القنوات: stackoverflow أو slack

اتريد:

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

السلوك الحالي

لا يعمل socket.io-client مع @ angular / [email protected] بسبب الاعتماد على node.js ' global var
(يبدو أنه يأتي من [email protected] ، لكن لا يمكنني العثور على من يحافظ على هذه الإصدارات)

خطوات إعادة الإنتاج (إذا كان السلوك الحالي خطأ)

انظر https://github.com/angular/angular-cli/issues/8160

سلوك متوقع

اقامة

  • نظام التشغيل:
  • المتصفح:
  • إصدار socket.io: 2.0.4

التعليق الأكثر فائدة

وفقًا لـ https://github.com/angular/angular-cli/issues/8160#issuecomment -386153833:

يجب أن تعمل إضافة polyfills.ts التالية في Angular@6 :

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

في أي حال ، لا ينبغي حل هذه المشكلة IMO ، يجب على socket.io-client إما إزالة التبعية الضمنية على global ، أو المستند الذي يحتاج إلى polyfill (من قبل أي شخص يستخدم المصادر المجمعة مسبقًا ، وليس فقط المستخدمين الزاوي)

(راجع للشغل أين مصادر أحدث [email protected] ؟ ربما يمكنني المساعدة)

ال 49 كومينتر

أيضا تواجه هذه القضية حاليا

بما أن https://github.com/angular/angular-cli/issues/8160 قد تم حله الآن ، هل يمكننا إغلاق هذه المشكلة؟ شكرا!

لا أعتقد ذلك ، لأنهم في الزاوية / CLI> 6 أزالوا العالمي بشكل دائم.
هل يمكنك أن تبدأ النظر في الأمر مرة أخرى من فضلك؟ https://github.com/angular/angular-cli/issues/9827

BR ،
كيفن

حل بديل حتى يقوم Angular CLI بإصلاحه أو جعل من الممكن تجاوز أمر العقدة ، ثم يمكنك إضافة ملف socket.io-client الرفيع في قسم المسارات في tsconfig.app.json

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

حتى إذا كان يعمل حاليًا ، وفقًا لـ https://github.com/angular/angular-cli/issues/9827#issuecomment -369578814 ، فستكون هذه مشكلة في Angular@6 :

"[هذا] بشكل عام فقط لموقف حيث لا تعمل شفرة المتصفح التي يجب أن تعمل على الإطلاق فقط عندما تكون مدمجة بأدوات محددة للغاية. هذا ليس موقفًا جيدًا."

أؤكد أنه مكسور في Angular 6 RC5. لا أحد يعرف الحل؟

ngervasi لقد فعلنا ذلك من خلال فعل مثل علقت هنا: https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639

حاولت:

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

لكنه لا يعمل في Angular 6RC5 ، ما زلت أتلقى الخطأ:

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)

وفقًا لـ https://github.com/angular/angular-cli/issues/8160#issuecomment -386153833:

يجب أن تعمل إضافة polyfills.ts التالية في Angular@6 :

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

في أي حال ، لا ينبغي حل هذه المشكلة IMO ، يجب على socket.io-client إما إزالة التبعية الضمنية على global ، أو المستند الذي يحتاج إلى polyfill (من قبل أي شخص يستخدم المصادر المجمعة مسبقًا ، وليس فقط المستخدمين الزاوي)

(راجع للشغل أين مصادر أحدث [email protected] ؟ ربما يمكنني المساعدة)

ما هو الإصلاح الأفضل؟ https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639 (إضافة إلى المسارات في tsconfig) أو https://github.com/socketio/socket.io-client/issues/1166 #issuecomment -386195105 (التعيين إلى العمومي)؟

نجح كلا الخيارين بالنسبة لي في مشروع Angular v6 الذي تم إنشاؤه باستخدام Angular CLI.

amitport مصادر حزمة has-binary2 هنا: https://github.com/darrachequesne/has-binary

على الرغم من أنني أخشى أن هذا ليس الحدث الوحيد.

darrenmothersele لا أعتقد أن هناك "أفضل" بالضبط. قد يكون لإضافة "عالمي" آثار جانبية على libs الأخرى بينما قد يكون لإضافة ملف "رفيع" تأثير سلبي على حجم الحزمة (ليس بالضرورة)

أضاف darrachequesne علاقات عامة https://github.com/darrachequesne/has-binary/pull/4 (إنها بداية :))

لقد جربت كلا الحلين ومع مشروع 6.0.0 الزاوي الحالي ولم يعمل أي شيء. لقد أضفت إدخال المسارات إلى tsconfig.app.json والمدخل إلى polyfills.ts ولكن ما زلت أحصل على نفس الخطأ في الكروم.

نفس الشيء هنا ، لا يعمل حل tsconfig على ng cli 6

// إضافة عالمية إلى النافذة ، وتعيين قيمة النافذة نفسها.
(نافذة مثل أي). global = نافذة ؛

يعمل لدي
شكرا.

يعمل لأجلي أيضًا! شكرا!

إنه يعمل لدي أيضا ! شكرا جزيلا ! :د

أين وضعت (window as any).global = window; ؟
شكرا.

أهلا،

فقط هناك (في الصورة).

2018-05-17 21:07 بتوقيت جرينتش + 02:00

أين وضعت (نافذة مثل أي). global = window ؛ ؟
شكرا.

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-389975067 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/APZTlGpMwMpnAscifHT2ZQrRUSJqLejCks5tzcp3gaJpZM4QD_kq
.

-

أرنو توسي فاسيليف
Développeur web full-stack chez Leaf مواقع الويب

ويب الموقع: www.leaf-website.esy.es http://www.leaf-website.esy.es
البريد: a.tussy.
هاتف: 07 77 83 29 44

اين وضعتها...

ضع هذا في polyfills.ts

(window as any).global = window

بين السطر 63 و 70

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

اين وضعتها...

ضع هذا في polyfills.ts الخاص بك

(نافذة مثل أي). العالمية = نافذة

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-393592879 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/APZTlPci9GKE3R8lwc1g3qfqWODeXIPiks5t4Br1gaJpZM4QD_kq
.

-

أرنو توسي فاسيليف
Développeur web full-stack chez Leaf مواقع الويب

ويب الموقع: www.leaf-website.esy.es http://www.leaf-website.esy.es
البريد: a.tussy.
هاتف: 07 77 83 29 44

amitport بفضل الحل البديل الذي قدمته يعمل !! AngularTeam ، كيف تستمر في كسر كل شيء يا رفاق: / لقد تمكنت حتى من الحصول على أفراد فريقك في فريق rxjs وفجأة حتى rxjs يكسر كل شيء الآن في تغييرات الإصدار ... كان مواكبًا للزاوية منذ أول إصدار مستقر وأنا مندهش من الخاص بك القدرة على كسر كل شيء في كل إصدار.

LucasFrecia إنها قضية socket.io ليست Angular. حقق Angular أداءً جيدًا من خلال التوقف عن إخفائه في الإصدار 6 (والذي تم وضع علامة عليه باعتباره إصدار كسر رئيسي)

تمت إضافة طلب سحب آخر منذ أسبوعين https://github.com/webmodules/blob/pull/14 لـ https://github.com/webmodules/blob (مستخدم بواسطة engine.io-parser).

لا تحصل على أي رد ، يمكن لأي شخص هنا دمجها؟ تضمين التغريدة

إضافة (نافذة كأي). global = window ؛ إلى polyfills.ts عملت معي

تضمين التغريدة
أنه يعمل بشكل جيد

أضع (نافذة كأي) .global = window في ملف polyfills.ts
لا يعطي ReferenceError: global is not defined في localhost ولكنه يعطي هذا الخطأ إذا حاولت تشغيل بناء الإنتاج مع خادم http لأغراض الاختبار.
أي دليل لماذا يحدث هذا؟
الأمر عاجل للغاية!

مرحبا @ gupta82anish ،
لقد وضعت (window as any).global = window; في ملف pollyfills.ts وقمت بتشغيل المشروع في localhost (التطوير) وكذلك قمت ببنائه للإنتاج ولم أحصل على أي خطأ.
عملت مثل السحر.

يبدو أن الحل البديل (window as any).global = window; في pollyfills.ts يعمل بالنسبة لي في الزاوية الأساسية 6.1.0. دعونا نأمل أن يتم تحديث socket.io قريبا ..

(نافذة مثل أي). global = نافذة ؛ في pollyfills.ts عملت معي أيضًا !!

(window as any).global = window;
هذا حل أنيق للغاية. لكن هل هذه هي الطريقة الصحيحة لفعل الأشياء؟

@ avinexus7 ليست الطريقة الصحيحة لعمل الأشياء. إنه حل بديل لمشكلة مفتوحة في socket.io-client : استخدام الكائن "global" ، الذي لا يوجد في المتصفحات.

(AFAIK ، لا أحد يبذل جهدًا لحل هذه المشكلة ، انظر تم التجاهل: https://github.com/socketio/engine.io-parser/issues/99 و https://github.com/webmodules/blob/pull / 14)

amitport ، هل يمكنك الوصول إلى دعم NPM ، بحيث يمنحك حقوق نشر إصدار جديد من الحزمة blob ؟

darrachequesne - انتهى ، لقد قدمت طلبًا إلى NPM

(window as any).global = window
أو
(window as any) = window
أضف الكود أعلاه في ملف polyfills.ts .

وفقًا لـ angular / angular-cli # 8160 (تعليق) :

يجب أن تعمل إضافة polyfills.ts التالية في Angular@6 :

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

في أي حال ، لا ينبغي حل هذه المشكلة IMO ، يجب على socket.io-client إما إزالة التبعية الضمنية على global ، أو المستند الذي يحتاج إلى polyfill (من قبل أي شخص يستخدم المصادر المجمعة مسبقًا ، وليس فقط المستخدمين الزاوي)

(راجع للشغل أين مصادر أحدث [email protected] ؟ ربما يمكنني المساعدة)

نعم ، لقد نجح هذا معي أيضًا .. شكرًا لك

اين وضعتها...

ضع هذا في polyfills.ts

(window as any).global = window

@ bibhas2 عظيم! عملت من أجلي

ربما تم إصلاحه الآن بعد أن تم إصدار https://github.com/socketio/engine.io-parser/releases/tag/2.1.3 (قد يلزم إعادة تثبيت socket.io-client بدون قفل الحزمة)

لا تعمل مع
├─ محرك. [email protected]
└─ مقبس. [email protected]

@ kartikupadhyay90 هل يمكنك إضافة تفاصيل؟

بعد الترقية إلى 2.2.0 في تطبيق ReactNative الخاص بي ، لا يتلقى مثيل socket.io إشعارًا من الخادم. اضطررت إلى الرجوع إلى 2.1.1

alimek هل أنت متأكد من أن الخطأ الذي تعاني منه متعلق بهذه المشكلة؟ لذا يرجى إضافة التفاصيل. خلاف ذلك ، يرجى نشر مشكلة جديدة

amitport إذا كان هذا هو التغيير الوحيد بين الإصدار السابق و 2.2.0 ، فأعتقد ذلك

alimek إعادة صياغة: إذا كان الخطأ الخاص بك هو _the_ مثل هذا الخطأ ، أضف التفاصيل. وإلا يرجى فتح مشكلة جديدة (والتي قد تكون تراجعًا).

(راجع للشغل ، أنا لست مشرفًا على هذا lib ، أنا فقط أعلق على كيفية عمل معالجة المشكلات بشكل عام. إذا كنت تريد معالجة مشكلتك ، فأنت بحاجة إلى إضافة تفاصيل قابلة للتنفيذ ونشرها بشكل مناسب)

في وضعي ، يبدو أن 2.2.0 يعتمد على "engine.io-client": "~ 3.3.1" ، والذي يعتمد على "engine.io-parser": "~ 2.1.1". ومع ذلك ، يبدو أن برنامج engine.io-parser على نظامي هو 2.1.2 والذي لا يزال يحتوي على إشارات إلى المتغير "العام". يبدو أنه تم إصلاح هذا في 2.1.3 ، ولكن يبدو أن npm i يسحب 2.1.2

إذا اضطررت إلى التخمين ، فيبدو أنه قد يعود مرة أخرى إلى 2.1.2 لأن الإصدار الأخير لـ 2.1.3 فشل
https://travis-ci.org/socketio/engine.io-parser

بصرف النظر عن ذلك ، لا يمكنني معرفة سبب استمراره في سحب الإصدار الأقدم من أجلي

لدي نفس المشكلة مع Jest + React + Typescript ، ولم أستطع إصلاح ذلك الإعداد (window as any).global = window . حاولت أيضًا وضع الكود في ملف polyfills.ts ،

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

وأيضًا باستخدام طريقة تحديد الملكية الخاصة بـ Jest ، ولكن لم يحالفنا الحظ.

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

copyProps(window, global);

أي شخص قادر على حل هذا لـ Jest ، أو يعرف كيف يمكنني أن أجعل هذا يعمل؟ amitport أي فكرة؟

شكرا،

eldem وآخرون. أقوم بإغلاق هذا الموضوع حيث أصبح هذا الموضوع مزيجًا عامًا من المشكلات التي قد لا تكون ذات صلة. إذا رأى أي شخص مشكلة تتعلق بالعميل العمومي و socket.io-client ، فيرجى فتح مشكلة جديدة مع إرشادات الاستنساخ والأخطاء الموضحة في وحدة التحكم والإصدارات المستخدمة وما إلى ذلك.

العمل مع Ionic4 / Angular7 - تثبيت 2.1.1 وإضافة (window as any).global = window في عمل \ srcpolyfills.ts - شكرًا لك!

لسؤالي أعلاه: Babel كان يسبب الخطأ أثناء تحويل ملف socket.io. إضافته في التحويل عملت بالنسبة لي.

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

amitport methode تعمل بشكل مثالي

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات