Im Moment haben wir ein Problem mit dem Paket, dessen Meta-Info-Datei (in der alle Versionen aufgeführt sind) mehr als 110 MB wiegt und das Herunterladen der Datei auf meinen Computer 2,5 Minuten dauert
Response timeout while trying to fetch http://regsitry.url/example-meta-file (over 30000ms)
In der lokalen Umgebung musste ich vorerst npm-Dateien optimieren, um das Standardzeitlimit zu ändern.
Im NPM-Debug-Protokoll habe ich festgestellt, dass die Nachricht Response timeout...
stammt
~/.nvm/versions/node/v12.16.1/lib/node_modules/npm/node_modules/node-fetch-npm/src/body.js:189:16
Diese Quelle: https://github.com/npm/node-fetch-npm/blob/latest/src/body.js#L189
Ich habe das so fest codiert:
// 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
}
n / a
n / a
Die Frage ist also:
npm install
übergeben oder definiert werden kann, wodurch der Wert von this.timeout
in dem von mir freigegebenen Code überschrieben wird?Erwähnenswert auch:
konnte im Code von @npm/cli
oder node-fetch-npm
nichts über 30000
was wie das "Standard-Timeout" ist, das irgendwie an node-fetch-npm
Scheint in make-fetch-pass verwendet zu werden, das in npm-registry-fetch und pacote verwendet wird. Wir stoßen auf ein Problem, bei dem die Metadaten so groß geworden sind, dass wir in einigen Umgebungen mehr als 30 Sekunden Zeit haben.
Es scheint immer noch keine Möglichkeit zu geben, die magische Option timeout
zu konfigurieren - https://github.com/npm/cli/blob/latest/lib/fetch-package-metadata.js#L56 - L58
Gleich hier poste ich es auf ionischem Cli Github
https://github.com/ionic-team/ionic-cli/issues/4387
Ein Downgrade auf 6.13.x hat das Problem für mich behoben - https://github.com/npm/cli/commit/ea0ff56cb6ad4bbf208dd3cf39a35e07fc2dff16#diff -3c78131ed196efbd3ce9fdee2df36e24R79
@darcyclarke für den
Das Upgrade von npm-registry-fetch
in NPM v6.14.0 hat anscheinend unser Problem mit einer Zeitüberschreitung verursacht, wie @darrinholst bereits erwähnt hat:
https://github.com/npm/cli/commit/ea0ff56cb6ad4bbf208dd3cf39a35e07fc2dff16
Ohne die Möglichkeit, das Zeitlimit für dieses npm-registry-fetch
in NPM v6.14.x neu zu definieren, mussten wir die Node.js-Version auf 12.16.1 korrigieren, da es die letzte Version mit NPM v6.13.x ist.
Und es scheint, als wäre es ein Fehler, denn vor diesen Änderungen https://github.com/npm/cli/commit/ea0ff56cb6ad4bbf208dd3cf39a35e07fc2dff16#diff -acf38193ec0e2d9a3b9dc202f239a77aR12 war ein riesiges Problem nicht.
@ sidoruk-sv danke, dass Sie uns darauf aufmerksam gemacht haben. Ich werde dies intern zurücknehmen und prüfen, ob wir einen Patch versenden können, um dieses Problem zu beheben und / oder eine Flagge zu finden / einzuführen.
Wir können unser Projekt nicht bereitstellen. Meistens tritt bei einer Webpack-Metadatei eine Zeitüberschreitung auf, manchmal eine Firebase. In den letzten Wochen wurde es schlimmer, anscheinend hat die Metadatei jetzt einen Punkt erreicht, an dem sie durchweg fehlschlägt. Wir werden versuchen, ein Downgrade auf 6.13.7 durchzuführen.
Bearbeiten: Nach dem Downgrade haben wir den ersten grünen Build nach 10+ fehlgeschlagen, sieht vielversprechend aus.
Siehe https://github.com/npm/npm-registry-fetch/issues/26
Verschieben wir das Standardzeitlimit für nrf v4 (npm v6) auf Null zurück, erhöhen es auf spätestens 5 m (npm v7) und fügen der CLI v7 eine Option --fetch-timeout
, um dies explizit festzulegen.
Ich denke, das würde das unmittelbare Problem lösen und uns in Zukunft an einen besseren Ort bringen.
Das aktuelle Update besteht also darin, auf NPM 6.14.5
zu aktualisieren.
Es wäre perfekt, wenn die neuesten Node.js-Versionen (10.x, 12.x, 13.x, 14.x) mit 6.14.5
anstelle von 6.14.4
:
https://nodejs.org/en/download/releases/
Die Dokumentation zur npm-Konfiguration enthält mehrere Einträge für Zeitüberschreitungen. Ignoriert dieser Code diese Einstellungen oder gibt es keine Einstellung für diesen speziellen Fall und das ist das Problem?
Gibt es keine Einstellung für diesen speziellen Fall und das ist das Problem?
Hilfreichster Kommentar
Das aktuelle Update besteht also darin, auf NPM
6.14.5
zu aktualisieren.Es wäre perfekt, wenn die neuesten Node.js-Versionen (10.x, 12.x, 13.x, 14.x) mit
6.14.5
anstelle von6.14.4
:https://nodejs.org/en/download/releases/