في الوقت الحالي ، لدينا مشكلة في الحزمة ، حيث يبلغ وزن ملف معلومات التعريف (حيث يتم سرد جميع الإصدارات) أكثر من 110 ميغابايت ويستغرق تنزيل الملف على جهازي 2.5 دقيقة ، بالنسبة لفريقنا ، يتسبب ذلك في فشل تثبيت npm المزعج بسبب
Response timeout while trying to fetch http://regsitry.url/example-meta-file (over 30000ms)
في الوقت الحالي ، في البيئة المحلية ، اضطررت إلى ضبط ملفات npm لتغيير المهلة الافتراضية.
في سجل تصحيح الأخطاء NPM ، وجدت أن رسالة Response timeout...
تأتي من
~/.nvm/versions/node/v12.16.1/lib/node_modules/npm/node_modules/node-fetch-npm/src/body.js:189:16
هذه المصادر: https://github.com/npm/node-fetch-npm/blob/latest/src/body.js#L189
لقد قمت بترميز ذلك بهذه الطريقة:
// allow timeout on slow response body
if (this.timeout) {
resTimeout = setTimeout(() => {
abort = true
reject(new FetchError(`Response timeout while trying to fetch ${this.url} (over ${this.timeout}ms)`, 'body-timeout'))
- }, this.timeout)
+ }, 5 * 60* 1000) // 5 minutes timeout to prevent failing on huge meta files downloading
}
غير متوفر
غير متوفر
إذن السؤال هو:
npm install
، والتي ستتجاوز this.timeout
في الكود الذي أشاركه.وتجدر الإشارة أيضًا إلى:
تعذر العثور في الرمز @npm/cli
أو node-fetch-npm
أي شيء عن 30000
وهو مثل "المهلة الافتراضية" التي تم تمريرها إلى node-fetch-npm
بطريقة ما
يبدو أنه يستخدم في make-fetch-يحدث والذي يستخدم في npm-Registry-fetch و pacote. نواجه مشكلة حيث أصبحت البيانات الوصفية كبيرة بما يكفي لدفعنا لأكثر من 30 ثانية في بعض البيئات.
لا تزال هناك طريقة لتكوين الخيار السحري timeout
- https://github.com/npm/cli/blob/latest/lib/fetch-package-metadata.js#L56 - L58
نفس الشيء هنا أنشره على أيوني cli github
https://github.com/ionic-team/ionic-cli/issues/4387
الرجوع إلى الإصدار 6.13.x تم حله لي - https://github.com/npm/cli/commit/ea0ff56cb6ad4bbf208dd3cf39a35e07fc2dff16#diff -3c78131ed196efbd3ce9fdee2df36e24R79
darcyclarke في الوقت الحالي ، لدينا المزيد من المشاكل بسبب ذلك ، لأن أحدث إصدار من Node.js v12.16.2 تم شحنه مع NPM v6.14.x افتراضيًا.
يبدو أن ترقية npm-registry-fetch
في NPM v6.14.0 تسببت في مشكلتنا مع انتهاء المهلة كما ذكر darrinholst سابقًا:
https://github.com/npm/cli/commit/ea0ff56cb6ad4bbf208dd3cf39a35e07fc2dff16
بدون القدرة على إعادة تعريف المهلة لهذا npm-registry-fetch
في NPM v6.14.x ، كان علينا تثبيت إصدار Node.js إلى 12.16.1 لأنه الإصدار الأخير مع NPM v6.13.x.
ويبدو أنه خطأ ، لأنه قبل أن يتغير https://github.com/npm/cli/commit/ea0ff56cb6ad4bbf208dd3cf39a35e07fc2dff16#diff -acf38193ec0e2d9a3b9dc202f239a77aR12 ، لم تكن جميع ملفات التعريف الضخمة.
@ sidoruk-sv نقدر لك لفت انتباهنا إلى هذا. سأستعيد هذا داخليًا وأرى ما إذا كان بإمكاننا شحن تصحيح لحل هذه المشكلة و / أو البحث عن / تقديم علامة.
نحن غير قادرين على نشر مشروعنا ، وغالبًا ما تنتهي مهلة ملف تعريف webpack ، وأحيانًا Firebase. ازداد الأمر سوءًا في الأسابيع الماضية ، ويبدو أن ملف التعريف وصل الآن إلى نقطة كان فيها فشلًا باستمرار. سنحاول الرجوع إلى 6.13.7.
تعديل: بعد الرجوع إلى إصدار أقدم ، حصلنا على أول بنية خضراء بعد فشل 10+ ، تبدو واعدة.
راجع https://github.com/npm/npm-registry-fetch/issues/26
دعنا نعيد المهلة الافتراضية إلى الصفر لـ nrf v4 (npm v6) ، ونرفعها إلى 5 أمتار في الأحدث (npm v7) ، ونضيف خيار --fetch-timeout
في CLI v7 لتعيين ذلك بشكل صريح.
أعتقد أن هذا سيحل المشكلة الفورية ويضعنا في وضع أفضل للمضي قدمًا.
لذا فإن الإصلاح الحالي هو الترقية إلى NPM 6.14.5
.
سيكون مثاليًا عندما يتم شحن أحدث إصدارات Node.js (10.x ، 12.x ، 13.x ، 14.x) بـ 6.14.5
بدلاً من 6.14.4
:
https://nodejs.org/en/download/releases/
وثائق التكوين npm لها عدة إدخالات للمهلة. هل هذا الرمز يتجاهل تلك الإعدادات ، أم أنه لا يوجد إعداد لهذه الحالة المحددة وهذه هي المشكلة؟
ألا يوجد إعداد لهذه الحالة بالتحديد وهذه هي المشكلة؟
التعليق الأكثر فائدة
لذا فإن الإصلاح الحالي هو الترقية إلى NPM
6.14.5
.سيكون مثاليًا عندما يتم شحن أحدث إصدارات Node.js (10.x ، 12.x ، 13.x ، 14.x) بـ
6.14.5
بدلاً من6.14.4
:https://nodejs.org/en/download/releases/