Next.js: Kann in der Entwicklung nicht navigieren (Router hängt nach einiger Zeit)

Erstellt am 5. Nov. 2018  ·  50Kommentare  ·  Quelle: vercel/next.js

Fehlerbericht

Beschreibe den Fehler

Entweder Link oder Router funktioniert beim clientseitigen Routing nicht mehr. Es scheint, dass HMR den Übergang zwischen den Seiten unterbricht. Es tritt am häufigsten auf, wenn die App für einige Zeit im Leerlauf oder im Hintergrund bleibt (obwohl ich festgestellt habe, dass dies beim Klicken passiert, ohne dass sie im Leerlauf ist).

Reproduzieren

Um das Verhalten zu reproduzieren, geben Sie bitte Codefragmente oder ein Repository an:

  1. Klonen Sie dieses Repo (https://github.com/malimccalla/next-routing-issue)
  2. Installieren Sie Abhängigkeiten npm install
  3. Führen Sie den Server npm run dev
  4. Besuchen Sie alle Seiten, indem Sie auf die Links klicken
  5. Machen Sie einen Kaffee (lassen Sie die Seite ~ 2 Minuten im Leerlauf)
  6. Versuchen Sie, alle Seiten zu besuchen, indem Sie auf die Links klicken
  7. Bestimmte Links navigieren nicht zu ihrer jeweiligen Seite 😔

Erwartetes Verhalten

Ich erwarte, alle einzelnen Seiten besuchen zu können

Tatsächliches Verhalten

Die Seite navigiert nicht zu bestimmten Routen. Durch das Aktualisieren der Seite wird das Problem behoben

Screenshots

Sowohl die Links "Über" als auch "Kontakt" funktionieren nicht (beachten Sie das HMR-Protokoll beim ersten Versuch jeder Route). Nach einer Seitenaktualisierung funktionieren sie wie erwartet. Wenn ich die App wieder ungefähr 2 Minuten im Leerlauf lasse, beginnt das Problem von vorne

next-issue

System Information

  • mac Mojave 10.14
  • Chrom
  • next.js v7.0.2

Zusätzlicher Kontext

Bei geöffneter Konsole können Sie sehen, dass das Router-Ereignis routeChangeStart ausgelöst wird, routeChangeComplete niemals.

bug p1

Hilfreichster Kommentar

Ich untersuche dieses Problem gerade.

Alle 50 Kommentare

Ich habe das gleiche Problem

Ich sehe dies auch in einer Produktionsumgebung, daher bin ich mir nicht sicher, ob HMR allein für das Problem verantwortlich ist

@ernerock Ich habe das obige Beispiel hier bereitgestellt

@malimccalla Mein Problem scheint sich von

import 'react-alice-carousel/lib/alice-carousel.css';

Das Navigationsverhalten entspricht dem von Ihnen gemeldeten. Scheint ein Problem mit '@ zeit / next-css' zu sein.

Scheint bereits in # 5291 gemeldet zu sein, kann vorübergehend durch Importieren und Leeren der CSS-Datei in _app.js 'gelöst' werden

@ernerock Sehr seltsam, sie können auf Umwegen verwandt sein!

Gleiches Problem hier: Ich habe Seiten als / home und / home / subpage eingerichtet. Wenn ich dann versuche, mit Router.push oder mit Router HOC oder sogar Link von / home zu / home / subpage zu navigieren, funktioniert dies nicht.

Okay, jetzt habe ich weitere Informationen. Ich habe versucht, / home in / home / welcome umzubenennen, und der oben beschriebene Fall funktioniert bei mir immer noch nicht

@ maciej-ka Ah ja, ich kann bestätigen, dass es auch mit push passiert, es ist nicht nur Link . Ändert den Titel, da er etwas irreführend ist.

@timneutkens Entschuldigung an @ Sie, ich weiß, dass es viele andere Probleme gibt, aber gibt es eine Chance, dass wir ein paar Augen darauf

Dies hängt höchstwahrscheinlich mit On-Demand-Einträgen und deren Entsorgung zusammen

Ich habe ein bisschen gegraben und es scheint, dass es aufgrund der entsorgten Seiten passiert. Sobald dieses Protokoll angezeigt wird, können die entsorgten Seiten nicht mehr navigiert werden

> Disposing inactive page(s): /

Ich habe heute Abend ein bisschen Zeit für einen tieferen Tauchgang und kann hoffentlich eine PR öffnen, um das Problem zu beheben. @timneutkens Vielen Dank für den ersten Einblick. Lassen Sie mich wissen, wenn Sie der Meinung sind, dass es einen Teil dieser Datei gibt, den ich mir besonders ansehen sollte

Ich habe versucht, dies zu beheben, aber in den zugehörigen Dateien ist viel los, und leider konnte ich dem nicht ganz auf den Grund gehen. Für alle anderen, die dieses Problem haben, verwende ich als aktuelle Problemumgehung diese Konfiguration in meinem next.config.js , um die Dauer zu verlängern, bevor Seiten entsorgt werden.

  onDemandEntries: {
    // period (in ms) where the server will keep pages in the buffer
    maxInactiveAge: 25 * 1000,
    // number of pages that should be kept simultaneously without being disposed
    pagesBufferLength: 5,
  },

Ich habe auch dieses Problem.

Schaut sich jemand darum? Ich habe auch dieses Problem, aber nicht unbedingt auf allen Routen. Es ist zufällig, welche Route / Routen nicht mehr reagieren, aber alle tun es schließlich.

Ich kann es momentan nicht untersuchen, da ich mich auf das Problem mit dem nächsten Server / Lambdas konzentriere, aber es hängt höchstwahrscheinlich mit On-Demand-Einträgen zusammen.

Ja, das ist es sicher. Passiert nach der Entsorgung.

Ich auch.

Kann mir jemand bestätigen, dass dies kein Problem in der Produktion ist?

Kann mir jemand bestätigen, dass dies kein Problem in der Produktion ist?

Im Produktionsmodus ist alles in Ordnung, nachdem ich ENV auf Produktion umgestellt habe, läuft alles in Ordnung

Ich habe dies sowohl in der Entwicklung als auch in der Produktion. Es spielt keine Rolle, ob die Seite inaktiv ist usw. Ich kann eine neue Ladung haben und es wird nicht funktionieren. In dev die Serverkonsole
> Building page: /contact
WAIT Compling...
success client complied in 462ms
Die Seite wird jedoch nie im Client gerendert. Zur gleichen Zeit auf der Client-Konsole:
[HMR] bundle rebuilding Nachricht, dann gibt die Serverkonsole:
Disposing of inactive page(s): /, /contact

Wenn ich mysite.com/contact in den Browser eingebe, wird es einwandfrei geladen.
Ich habe die Umgehung in next.config.js von maxInactiveAge und pagesBufferLength ohne Erfolg versucht.

[hoffte, dass es nur in der Entwicklung war, wie viele sagten]

EDIT: Ich hatte ein import 'node-mod/dist/theme.css in einer Komponente. Ich habe diesen Import auf _app.js verschoben und Link funktioniert.

Gleiches Problem hier, Route wird im Dev-Modus nach der Entsorgung nicht abgeschlossen. Es ist wirklich nervig.

@roytsang Anstatt "gleiches Problem" zu sagen, verwenden Sie 👍 für das Problem. Ihr Handbuch +1 wird beim Sortieren nach 👍 nicht berücksichtigt

Ich habe das gleiche Problem. Es begann erst heute, nachdem ich Head from next / head in meiner _app verwendet hatte, um einen Titel und ein Favicon anzuwenden.

@Atmospheres Haben Sie die Problemumgehungslösung @malimccalla ausprobiert? Es war keine vollständige Lösung, hat aber für mich als Problemumgehung funktioniert.

Ich bin noch nicht dazu gekommen, werde es aber bald tun. Ich dachte nur, dass weitere Informationen darüber, wann das Problem für mich aufgetreten ist, für jemanden nützlich sein könnten, der nach einer Lösung sucht.

Update: Ich habe heute Morgen einige Tests durchgeführt und hier ist, worauf ich gestoßen bin.

Die Probleme begannen gestern, das einzige Neue, was ich implementiert hatte, war der Head von next. Mir wurde klar, dass ich den Kopf in _document, der zum Laden von Stilen verwendet wurde, in Kopf geändert habe. Ich habe auch Head zu _app.js hinzugefügt, um Titel und Favicon festzulegen. Das Entfernen von Head in _app.js hat dies für mich nicht behoben. Das Entfernen von Head in _app und _document hat das Problem ebenfalls nicht behoben. Ich habe eine letzte Sache versucht, ich habe Head in _document zurück zu head zurückgesetzt und den Head in _app gelassen, um Titel und Favicon festzulegen, und jetzt ist das Problem weg.

Wenn das Problem aus irgendeinem Grund erneut auftritt, werde ich es hier erneut aktualisieren. Ich hoffe, diese Informationen könnten zu einer Lösung führen.

Update 2: Das Problem besteht weiterhin, obwohl es seltener auftritt als es der Fall war. Ich habe festgestellt, dass in diesem Fall das Skript-Tag, mit dem das js für diese Seite geladen wird, dupliziert wird. Wenn ich zum Beispiel die Seite "x" zum ersten Mal lade, wird sie hinzugefügt

Ist es möglich, uns mitzuteilen, wo das Problem lag und wie wir das Problem möglicherweise umgehen können, wenn wir derzeit kein Upgrade durchführen können? Hat es zum Beispiel mit dem Laden von CSS zu tun? Kann es in der Konfiguration geändert werden?

@ jon64digital Ich habe eine vollständige Beschreibung dieses Problems in # 5994 geschrieben. Sie können dies umgehen, indem Sie das Zeitlimit für die Entsorgung erhöhen.

@ Timneutkens Ich benutze 8.1.1-canary.24 und der Fehler existiert immer noch für mich. Irgendeine Idee?

Bearbeiten: herausgefunden, was passiert. Ich bin mir nicht sicher warum ...:
Ich hatte eine index.tsx- und eine index.less-Datei. Ich habe cssModules in meiner Datei netxt.config.js verwendet (mit withLess). Wenn Sie ein /subpage laden und einen Link haben, der auf / verweist (der Stile wie diesen importiert: import css from './index.less'; ), wird das Skript dynamisch geladen ( http://localhost:3000/_next/static/development/pages/index.js ) aber es wird nicht gerendert. Tatsächlich ändert sich die URL überhaupt nicht, es ist wie festgefahren ... Das Entfernen des weniger Dateiimports hat das Problem behoben.

Was tun?

Edit2: Scheint, ich stoße auf https://github.com/zeit/next-plugins/issues/282

Ich bekomme das immer noch einige Male auch auf 8.1.0 . Ich werde versuchen, eine neue Ausgabe zu reproduzieren und zu öffnen

Auch für mich gibt es nicht jedes Mal 404! nicht sicher, was das Problem mit dem Routing ist!? : /

package.json-Abhängigkeiten:

"dependencies": { "cross-env": "^5.2.0", "express": "^4.17.0", "next": "^8.1.0", "react": "^16.8.6", "react-dom": "^16.8.6" }

@jsbimra bitte immer eine vollständige Reproduktion zur Verfügung stellen. Es ist unmöglich zu untersuchen, "passiert für mich"

@jsbimra bitte _ immer_ eine vollständige Reproduktion zur Verfügung stellen. Es ist unmöglich zu untersuchen, "passiert für mich"

Es wurde ein Problem festgestellt, das mit dem fehlenden Schritt beim Erstellen einer Seite im Seitenordner von next.js zusammenhängt. Es tut mir leid, @timneutkens zu stören

eine Lösung dafür? passiert das auch in der produktion? weil in dev es mir passiert, der Fehler ist es von 2018 und 22. Mai 2019 noch ist dieser Fehler nicht behoben worden, wenn dies nicht in der Produktion passiert, bin ich nicht so besorgt, aber wenn es passiert, dann ist dies ein wirklich großes Problem ...

Der Fehler ist von 2018 und 22. Mai 2019, aber dieser Fehler wurde noch nicht behoben

Basierend auf der von @malimccalla bereitgestellten Reproduktion wurde

Wenn dies in der Produktion nicht passiert, bin ich nicht so besorgt

Das tut es nicht.

Beachten Sie, dass dieser Kommentar Ihr Problem nicht lösen wird. Wie schon oft gesagt:

Bitte geben Sie immer eine vollständige Reproduktion an. Es ist unmöglich zu untersuchen, "passiert für mich"

Ich habe das gleiche Problem mit der neuesten Version (8.1.0).

Ich habe das gleiche Problem mit der neuesten Version (8.1.0).

Ich habe jetzt ungefähr 3 Mal mit genau der gleichen Nachricht geantwortet. Bitte geben Sie eine Reproduktion an .

Beachten Sie, dass dieser Kommentar Ihr Problem nicht lösen wird. Wie schon oft gesagt:

Bitte geben Sie immer eine vollständige Reproduktion an. Es ist unmöglich zu untersuchen, "passiert für mich"

Ich war beunruhigt über das Problem, nicht auf ~ / index.tsx zugreifen zu können.
Aber ich habe endlich die Ursache gefunden!

Ich habe eine Bibliothek namens react-activity , aber gleichzeitig musste ich CSS importieren.

Wenn ich dasselbe CSS zweimal an verschiedenen Orten lese, kann ich anscheinend nicht migrieren.
Durch das Einlesen von _app.tsx konnte ich erfolgreich migrieren.

@timneutkens okay, sicher, ich kann die Entsorgungszeit verlängern, aber was ist mit der Situation, in der der Server zum ersten Mal gestartet wird? Ich kann nicht programmgesteuert zu diesen Seiten navigieren, da sie noch nicht erstellt wurden. 🤔

Ich habe jetzt ungefähr 4 Mal mit genau der gleichen Nachricht geantwortet. Bitte geben Sie eine Reproduktion an .

Beachten Sie, dass dieser Kommentar Ihr Problem nicht lösen wird. Wie schon oft gesagt:

Bitte geben Sie immer eine vollständige Reproduktion an. Es ist unmöglich zu untersuchen, "passiert für mich"

Um die spezifische Frage zu beantworten, werden Seiten nach Bedarf erstellt, und dieses System funktioniert einwandfrei. Ich gehe davon aus, dass Ihre Konfiguration etwas enthält, das dazu führt, dass Webpack die Datei nicht als fertig erstellt auslöst. Es ist jedoch schwer / unmöglich zu sagen, da es keine Reproduktion gibt.

Beachten Sie auch, dass das spezifische Problem, wie bereits erwähnt, bereits behoben wurde und dass das Erhöhen des Zeitlimits für das spezifische Problem, das auftritt, nicht hilfreich ist. Deshalb bitte ich immer wieder um eine Reproduktion 🙏.

Wir freuen uns sehr, dies zu untersuchen und Zeit damit zu verbringen.

Ich habe gestern ein neues Projekt erstellt und es hat gut funktioniert. Mein Projekt muss etwas Bestimmtes haben, damit es nicht funktioniert. Ich werde versuchen, es später heute allmählich auseinander zu nehmen und zu sehen, an welchem ​​Punkt das Problem verschwindet.

Ich würde gerne einen Blick darauf werfen, ob Sie es zuverlässig reproduzieren können.

Die gute Nachricht ist, dass ich den Fehler genau bestimmen konnte. Die schlechte Nachricht ist, dass das Problem mit meinem Projekt nicht anders war als das, was andere Leute in diesem Thread berichtet haben.

Wenn das Problem also mit CSS und Entsorgungslimit zusammenhängt und es angeblich behoben wurde, muss ich etwas falsch machen. Setzen Sie diese hier ein?

module.exports = withCSS({ onDemandEntries: { maxInactiveAge: 1000 * 60 * 60 } })

Reproduktion: https://github.com/dydokamil/next-js-router-bug

@ Dydokamil
Es ist ein Fehler bekannt: https://github.com/zeit/next-plugins/issues/282
Sie können es "lösen", indem Sie eine leere CSS-Datei importieren.

Ich kann dies dazu bringen, zuverlässig über Entwicklungs-, Produktions- und statische Exportmodi hinweg zu reproduzieren, und keine der Problemumgehungen für onDemandEntries oder leere CSS-Dateien hat geholfen.

Die einzige Möglichkeit, das Problem zu beheben, bestand darin, import 'highlight.js/styles/color-brewer.css'; aus der Body-Komponente auf meinen Blogpost-Seiten zu entfernen.

Jede <Link> -Instanz, die auf eine Blogpost-Seite verweist, kann nicht geladen werden, aber http://localhost:3000/_next/static/development/pages/post.js <Link> Klicken auf <Link> s in Blog-Posts perfekt funktionieren. Unkommentieren und alle <Link> s können keine Blog-Beiträge laden.

Wenn Sie eine dieser Routen für Blogpost-Seiten direkt treffen, funktioniert der Fehler nur auf der Clientseite -basiertes Routing. Dies geschah nach dem Upgrade von Version 6 auf Version 8.

Ich habe dies anfangs mit @zeit/next-css aber ich kann dieses Problem auf die gleiche Weise replizieren, nachdem ich @zeit/next-sass ausgetauscht und eine .scss-Datei importiert habe. Im Moment lade ich diese Stile nur mit styled-components drop @zeit/next-css . Nach Durchsicht von https://www.npmjs.com/package/@zeit/next -css und https://www.npmjs.com/package/@zeit/next -sass scheinen diese Verwendungsbeispiele zu brechen 🤔

Könnten Sie https://github.com/zeit/next-plugins/issues/282 ein Reproduktions-Repository hinzufügen

Was Sie beschreiben, klingt genau so.

Ich kann dies dazu bringen, zuverlässig über Entwicklungs-, Produktions- und statische Exportmodi hinweg zu reproduzieren, und keine der Problemumgehungen für onDemandEntries oder leere CSS-Dateien hat geholfen.

Die einzige Möglichkeit, das Problem zu beheben, bestand darin, import 'highlight.js/styles/color-brewer.css'; aus der Body-Komponente auf meinen Blogpost-Seiten zu entfernen.

Jede <Link> -Instanz, die auf eine Blogpost-Seite verweist, kann nicht geladen werden, aber http://localhost:3000/_next/static/development/pages/post.js <Link> Klicken auf <Link> s in Blog-Posts perfekt funktionieren. Unkommentieren und alle <Link> s können keine Blog-Beiträge laden.

Wenn Sie eine dieser Routen für Blogpostseiten direkt treffen, funktioniert der Fehler nur im Zusammenhang mit clientseitigem Routing. Dies geschah nach dem Upgrade von Version 6 auf Version 8.

Ich habe dies anfangs mit @zeit/next-css aber ich kann dieses Problem auf die gleiche Weise replizieren, nachdem ich @zeit/next-sass ausgetauscht und eine .scss-Datei importiert habe. Im Moment lade ich diese Stile nur mit styled-components drop @zeit/next-css . Nach Durchsicht von https://www.npmjs.com/package/@zeit/next -css und https://www.npmjs.com/package/@zeit/next -sass scheinen diese Verwendungsbeispiele zu brechen 🤔

Nach dem Hinzufügen des nächsten / css-Pakets kann ich bestätigen, dass dies auch mir passiert ist.

Das gleiche passierte mir in der Entwicklung (die Produktion funktioniert wie erwartet), und das Problem ist, wenn wir auf Seiten verlinken (oder Komponenten darin haben), die Sass-Dateien importieren.

Meine next.config.js Datei:

const withSass = require('@zeit/next-sass');

const withBundleAnalyzer = require('@next/bundle-analyzer')({
  enabled: process.env.ANALYZE === 'true',
});

require('dotenv').config();

module.exports = withBundleAnalyzer(
  withSass({
    distDir: '../dist',
    env: {...},
  }),
);

Eine der Komponenten in der Tiefe hat also diesen Import:

// MIGRATE: PriceDetail to styled components
import './PriceDetail.scss';

Wenn ich den Import kommentiere, funktioniert der Link. Es scheint also ein Problem mit dem withSass Plugin zu sein.

Ich habe ein ähnliches Problem, aber nicht dasselbe. Leider bekomme ich den gleichen Fehler
auch in der Produktion. Aber aus bestimmten Gründen funktionieren Links manchmal.

Ich habe das gleiche Problem mit der nächsten Version 9.4 festgestellt
Ich habe gestern CodeMirror zu meinem Projekt hinzugefügt und auch
import "codemirror/lib/codemirror.css"

Ich habe so etwas wie pages / page2.js, das einige Sachen macht und dann am Ende router.replace("/") aufruft und plötzlich aufhört, irgendetwas zu tun.
Das Ausführen von router.replace("/") im Debugger zeigte ein Versprechen, das niemals catch oder finally Blöcke auflöst oder trifft.

Möglicherweise ist auch erwähnenswert, dass ich next-css in meiner next.config.js habe - ich werde versuchen, es zu entfernen und zu sehen, ob dies Auswirkungen hat.

Sieht so aus, als gäbe es hier eine heiße Lösung? =)

Aha, das hat die Dinge für mich behoben - ich musste natürlich auch meinen Import in eine Shell-Datei _app.js .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen