مرحبًا بالجميع، اسمي عاصم خان، وأنا حاليًا مطور مكدس كامل في Meta Melon. واجهت مؤخرًا مشكلة محبطة أثناء العمل في مشروع لموقع Naseebi.com، وهو تطبيق ويب خاص بالزواج على الهاتف المحمول. تضمنت المشكلة إيقاف وحدة Punycode في Node.js، وأريد مشاركة تجربتي والحل معك.
أثناء العمل على ميزة إنشاء الملف الشخصي في التطبيق، واجهت خطأ 502 بوابة سيئة. بعد التحقق من سجلات الخادم الخاصة بي على AWS EC2، وجدت هذا التحذير:
The punycode module is deprecated. Please use a userland alternative instead. (Use node --trace-deprecation ... to show where the warning was created)
كان هذا غريبًا لأنني لم أستخدم Punycode مباشرة في الكود الخاص بي. ومع ذلك، بعد فحص ملف package-lock.json الخاص بي، وجدت أنه تم تضمينه باعتباره تبعية في مكان ما في المشروع. كان إصدار Node.js الخاص بي في ذلك الوقت هو v22.0.0. لقد حاولت الرجوع إلى الإصدار 20.9.0 وحتى الإصدار 18.18.0، لكن التحذير استمر.
تم إهمال وحدة punycode في الإصدار 21 من Node.js. لحل هذه المشكلة، كنت بحاجة إلى استبدالها ببديل userland الموصى به، punycode.js. ومع ذلك، فإن مجرد تثبيت وحدة userland لا يبدو أنه يساعد.
إليك الخطوات التي اتخذتها لحل المشكلة أخيرًا:
إذا لم تكن متأكدًا بشأن استخدام أحدث إصدار من Node.js، فالحل السريع هو الرجوع إلى إصدار قبل 21.
nvm install 20.5.1 nvm use 20.5.1
يمكنك تشغيل npm ls punycode لتحديد التبعيات التي لا تزال تستخدم punycode.
npm ls punycode
في حالتي، كان السببان هما ajv وwhatwg-url-without-unicode. لقد وجدت ذلك من خلال الخطوات التالية:
تحديث ajv: لقد قمت بتحديث ajv في ملف package.json الخاص بي.
"overrides": { "ajv": "^8.17.1" }
تحديث عنوان URL الخاص بـwhatwg: لقد قمت بتحديث عنوان url الخاص بـwhatwg أيضًا.
"overrides": { "ajv": "^8.17.1", "whatwg-url": "^14.0.0" }
بعد هذه التحديثات، اختفى التحذير. ومع ذلك، إذا استمرت المشكلة، يمكنك استخدام الخطوات التالية.
3. قمع التحذير (إصلاح مؤقت)
يمكنك منع التحذير في البرامج النصية package.json الخاصة بك:
"scripts": { "start": "NODE_NO_WARNINGS=1 vite" }
سيؤدي هذا إلى إزالة تحذيرات الإيقاف من مخرجات وحدة التحكم الخاصة بك.
4. استخدم PM2 لإدارة التطبيق الخاص بك
أخيرًا، أدركت أن إحدى مجموعتي كانت معطلة، لذلك أضفت ملف Ecosystem.config.js في جذر المشروع لإدارة تطبيقي باستخدام PM2.
module.exports = { apps: [ { name: "my-app", script: "npm", args: "run start", instances: "max", exec_mode: "cluster", max_memory_restart: "1G", watch: false, autorestart: true, restart_delay: 5000, }, ], };
بعد الضغط على الكود وسحبه على EC2، قمت بإعادة تشغيل خادم PM2، وبدأ كل شيء يعمل بسلاسة.
علمتني هذه المشكلة الكثير عن إدارة التبعيات والتعامل مع الوحدات المهملة. على الرغم من إهمال وحدة Punycode، فلا يزال بإمكانك استخدامها مؤقتًا، ولكن من الأفضل معالجة المشكلة الآن لتجنب حدوث مشكلات في المستقبل. آمل أن يساعدك هذا الدليل إذا واجهت مشكلة مماثلة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3