Next.js: Impossible de naviguer en développement (le routeur se bloque après un certain temps)

Créé le 5 nov. 2018  ·  50Commentaires  ·  Source: vercel/next.js

Rapport d'erreur

Décrivez le bogue

Soit Link ou Router cesse de fonctionner lors du routage côté client. Il semble que HMR puisse interrompre la transition entre les pages. Cela se produit le plus souvent si l'application est laissée inactive ou en arrière-plan pendant un certain temps (bien que j'aie vécu cela en cliquant sans qu'elle soit inactive)

Reproduire

Étapes pour reproduire le comportement, veuillez fournir des extraits de code ou un référentiel:

  1. Clonez ce dépôt (https://github.com/malimccalla/next-routing-issue)
  2. Installer les dépendances npm install
  3. Exécutez le serveur npm run dev
  4. Visitez toutes les pages en cliquant sur les liens
  5. Allez faire un café (laissez la page inactive pendant ~ 2 minutes)
  6. Essayez de visiter toutes les pages en cliquant sur les liens
  7. Certains liens ne naviguent pas vers leur page respective 😔

Comportement prévisible

J'espère pouvoir visiter toutes les pages individuelles

Comportement réel

La page ne navigue pas vers certains itinéraires. L'actualisation de la page résoudra le problème

Captures d'écran

Les liens «à propos» et «contact» ne fonctionnent pas (notez le journal HMR à la première tentative de chaque itinéraire). Après une actualisation de la page, ils fonctionnent comme prévu. Si je laisse l'application inactive pendant environ 2 minutes, elle recommencera avec le problème

next-issue

Informations système

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

Contexte supplémentaire

Avec la console ouverte, vous pouvez voir que l'événement Router routeChangeStart déclenche mais que routeChangeComplete ne le fait jamais.

bug p1

Commentaire le plus utile

J'étudie ce problème en ce moment.

Tous les 50 commentaires

J'ai le même problème

Je vois également cela dans un environnement de production, donc je ne suis pas sûr que HMR soit le seul responsable du problème

@ernerock J'ai déployé l'exemple ci-dessus ici mais le problème ne semble pas se produire une fois en direct. Avez-vous pu reproduire dans un environnement de production?

@malimccalla Il semble que mon problème soit différent du vôtre, mais le comportement de navigation est le même. Lorsque la page vers laquelle je navigue a une importation CSS

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

le comportement de navigation est le même que celui que vous avez signalé. Semble être un problème avec '@ zeit / next-css'

Semble déjà signalé dans # 5291, peut être `` résolu '' temporairement en important et vide le fichier css dans _app.js

@ernerock Très étrange, ils peuvent être liés d'une manière détournée!

Même problème ici, j'ai des pages configurées comme / home et / home / subpage, alors si j'essaie de naviguer de / home vers / home / sous-page avec Router.push, ou avecRouter HOC ou même Link, cela ne fonctionne pas.

OK maintenant j'ai quelques informations supplémentaires, j'ai essayé de renommer / home en / home / welcome et le cas décrit ci-dessus ne fonctionne toujours pas pour moi

@ maciej-ka Ah oui je peux confirmer que ça arrive aussi avec push ce n'est pas seulement Link . Va changer le titre, car c'est un peu trompeur.

@timneutkens Désolé pour @ vous Je sais qu'il y a plein d'autres problèmes, mais est-ce que nous pouvons avoir des yeux là-dessus? J'essaye d'aller au fond des choses depuis une semaine maintenant sans chance et cela bloque vraiment le développement

C'est probablement lié aux entrées à la demande et à leur élimination

J'ai fait un peu de fouille et il semble que cela soit dû au fait que les pages sont éliminées. Dès que ce journal apparaît, les pages supprimées ne peuvent plus être consultées

> Disposing inactive page(s): /

J'ai un peu de temps ce soir pour approfondir mes connaissances et j'espère pouvoir ouvrir un PR pour résoudre le problème. @timneutkens Merci pour le premier aperçu, faites-moi savoir si vous pensez qu'il y a une partie de ce fichier que je devrais examiner en particulier

J'ai essayé de résoudre ce problème, mais il se passe beaucoup de choses dans les fichiers associés et malheureusement, je n'ai pas pu aller au fond des choses. Pour toute autre personne ayant ce problème, en tant que solution de contournement actuelle, j'utilise cette configuration dans mon next.config.js pour prolonger la durée avant que les pages ne soient supprimées.

  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,
  },

J'ai aussi ce problème.

Est-ce que quelqu'un examine cela? J'ai aussi ce problème mais pas nécessairement à toutes les routes. Les routes / routes qui ne répondent plus sont aléatoires, mais elles finissent toutes par le faire.

Je ne peux pas l'examiner pour le moment car je me concentre sur le problème du prochain serveur / lambdas, mais il est très probablement lié aux entrées à la demande.

Oui, c'est sûr. Se produit après l'élimination.

Pareil pour moi.

Quelqu'un peut-il me confirmer que ce n'est pas un problème de production?

Quelqu'un peut-il me confirmer que ce n'est pas un problème de production?

En mode production, tout va bien, après avoir changé ENV en production, tout va bien

Je l'ai à la fois en développement et en production. Peu importe si la page est inactive, etc. Je peux avoir une nouvelle charge et cela ne fonctionnera pas. En dev, la console du serveur
> Building page: /contact
WAIT Compling...
success client complied in 462ms
mais la page ne s'affiche jamais dans le client. En même temps, sur la console client:
[HMR] bundle rebuilding message, puis la console du serveur donne:
Disposing of inactive page(s): /, /contact

Si je tape mysite.com/contact dans le navigateur, il se chargera très bien.
J'ai essayé le travail autour de next.config.js de maxInactiveAge et pagesBufferLength en vain.

[espérait que c'était juste en développement comme beaucoup le disaient]

EDIT: J'ai eu un import 'node-mod/dist/theme.css dans un composant. J'ai déplacé cette importation vers _app.js et ce Link fonctionne.

Même problème ici, l'itinéraire ne se termine pas en mode développement après l'élimination. C'est vraiment ennuyeux.

@roytsang Au lieu de dire "même problème", utilisez 👍 sur le problème. Votre manuel +1 ne finit pas par être pris en compte lors du tri sur 👍

J'ai le même problème. Cela n'a commencé aujourd'hui qu'après avoir commencé à utiliser Head from next / head dans mon _app pour appliquer un titre et un favicon.

@Atmospheres avez-vous essayé la solution de contournement @malimccalla ? Ce n'était pas une solution totale mais a fonctionné pour moi comme une solution de contournement.

Je n'ai pas encore compris, mais je le ferai bientôt. J'ai juste pensé que plus d'informations sur le moment où le problème se posait pour moi pourraient être utiles à quelqu'un qui cherche un correctif.

Mise à jour: J'ai fait des tests ce matin et voici ce que j'ai rencontré.

Les problèmes ont commencé hier, la seule nouveauté que j'avais implémentée est le Head from next. J'ai réalisé que j'avais changé la tête dans _document, utilisée pour charger dans les styles, en Tête. J'ai également ajouté Head à _app.js pour définir le titre et le favicon. La suppression de Head dans _app.js n'a pas résolu ce problème pour moi. La suppression de Head dans _app et _document n'a pas non plus résolu le problème. J'ai essayé une dernière chose, j'ai retourné Head dans _document à la tête et laissé la tête dans _app pour définir le titre et le favicon, et maintenant le problème est parti.

Si pour une raison quelconque le problème revient, je mets à jour ici à nouveau. J'espère que cette information pourrait vous aider à résoudre le problème.

Mise à jour 2: Le problème persiste, même s'il survient moins fréquemment qu'il ne l'a fait. J'ai remarqué que lorsque cela se produit, je vois la balise de script qui charge les js pour cette page est dupliquée. Par exemple, la première fois que je charge la page "x", elle ajoute

Est-il possible de nous indiquer quel était le problème et comment nous pourrions le contourner si nous ne pouvons pas mettre à niveau maintenant? Par exemple, est-ce à voir avec le chargement css? Est-ce quelque chose qui peut être changé dans la configuration?

@ jon64digital J'ai écrit une description complète de ce problème dans # 5994, vous pouvez le contourner en augmentant le délai d'élimination.

@timneutkens J'utilise 8.1.1-canary.24 et le bogue existe toujours pour moi. Une idée?

Edit: découvrez ce qui se passe. Je ne sais pas pourquoi tho ...:
J'avais un fichier index.tsx et index.less. J'utilisais cssModules dans mon fichier netxt.config.js (en utilisant withLess). Lors du chargement d'un /subpage et d'avoir un lien qui référence / (qui importe des styles comme celui-ci: import css from './index.less'; ), le script sera chargé dynamiquement ( http://localhost:3000/_next/static/development/pages/index.js ) mais il n'est pas rendu. En fait, l'URL ne change pas du tout, c'est comme si elle était bloquée ... La suppression de l'importation de fichiers moins a résolu le problème.

Que faire?

Edit2: Il semble que je rencontre https://github.com/zeit/next-plugins/issues/282

Je reçois toujours cela se produit parfois aussi sur 8.1.0 . J'essaierai de reproduire et d'ouvrir un nouveau numéro

pour moi aussi, ce n'est pas naviguer vers / à propos de la route donne 404 à chaque fois! ne sais pas quel est le problème avec le routage !? : /

dépendances package.json:

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

@jsbimra veuillez toujours fournir une reproduction complète. Il est impossible de se pencher sur "qui arrive pour moi"

@jsbimra veuillez toujours fournir une reproduction complète. Il est impossible de se pencher sur "qui arrive pour moi"

trouvé un problème, il était lié à une étape manquante dans la création d'une page sous le dossier de page de next.js, désolé de déranger @timneutkens

une solution pour cela? cela arrive-t-il aussi en production? car en dev cela m'arrive, le bogue est de 2018 et le 22 mai 2019, ce bogue n'a toujours pas été corrigé, si cela ne se produit pas en production, je ne suis pas si concerné, mais si cela arrive, c'est un très gros problème ...

le bogue vient de 2018 et du 22 mai 2019, ce bogue n'a toujours pas été corrigé

Basé sur la reproduction fournie par @malimccalla, il a été corrigé.

si cela ne se produit pas en production, je ne suis pas si inquiet

Ce n'est pas le cas.

Notez que ce commentaire ne résoudra pas votre problème. Comme dit plusieurs fois auparavant:

veuillez toujours fournir une reproduction complète. Il est impossible de se pencher sur "qui arrive pour moi"

J'ai le même problème avec la dernière version (8.1.0).

J'ai le même problème avec la dernière version (8.1.0).

J'ai maintenant répondu environ 3 fois avec exactement le même message. Veuillez fournir une reproduction .

Notez que ce commentaire ne résoudra pas votre problème. Comme dit plusieurs fois auparavant:

veuillez toujours fournir une reproduction complète. Il est impossible de se pencher sur "qui arrive pour moi"

J'ai été troublé par le problème de ne pas pouvoir accéder à ~ / index.tsx .
Mais j'ai enfin trouvé la cause!

J'ai utilisé une bibliothèque appelée react-activity , mais en même temps j'avais besoin d'importer du CSS.

Quand je lis deux fois le même css à différents endroits, il semble que je ne puisse pas migrer.
Suite à la lecture de _app.tsx , j'ai pu migrer avec succès.

@timneutkens d' accord, bien sûr, je peux augmenter le temps d'élimination, mais qu'en est-il de la situation où le serveur est démarré pour la première fois? Je ne pourrai pas accéder à ces pages par programme car elles ne sont pas encore créées. 🤔

J'ai maintenant répondu environ 4 fois avec exactement le même message. Veuillez fournir une reproduction .

Notez que ce commentaire ne résoudra pas votre problème. Comme dit plusieurs fois auparavant:

veuillez toujours fournir une reproduction complète. Il est impossible de se pencher sur "qui arrive pour moi"

Pour répondre à la question spécifique, les pages sont créées à la demande et ce système fonctionne très bien. Je suppose que vous avez quelque chose dans votre configuration qui empêche Webpack de déclencher le fichier en tant que construction terminée. Cependant c'est difficile / impossible à dire car il n'y a pas de reproduction.

Notez également que le problème spécifique, comme mentionné précédemment, a déjà été résolu et que l'augmentation du délai d'attente n'aide pas pour le problème spécifique que vous rencontrez. D'où la raison pour laquelle je demande toujours une reproduction 🙏.

Nous sommes très heureux d'examiner cela et d'y consacrer du temps.

J'ai créé un nouveau projet hier et cela a très bien fonctionné. Il doit y avoir quelque chose de spécifique dans mon projet qui l'empêche de fonctionner. J'essaierai de le démonter progressivement plus tard aujourd'hui et de voir à quel point le problème disparaîtra.

J'adorerais jeter un coup d'œil si vous pouvez le reproduire de manière fiable.

La bonne nouvelle est que j'ai pu identifier l'erreur. La mauvaise nouvelle est que le problème avec mon projet n'était pas différent de ce que d'autres personnes, dans ce fil, ont rapporté.

Donc, si le problème est lié au CSS et à la limite d'élimination, et qu'il est censé être résolu, je dois faire quelque chose de mal. Est-ce là que vous les mettez?

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

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

@dydokamil
C'est un bug connu: https://github.com/zeit/next-plugins/issues/282
Vous pouvez le «résoudre» en important un fichier CSS vide.

Je peux obtenir que cela se reproduise de manière fiable dans les modes de développement, de production et d'exportation statique et aucune des solutions de contournement onDemandEntries ou de fichier css vide n'a aidé.

La seule façon de résoudre le problème était de supprimer import 'highlight.js/styles/color-brewer.css'; du composant Body sur les pages de mon blog.

Toute instance <Link> qui pointait vers une page d'article de blog échouerait à se charger mais http://localhost:3000/_next/static/development/pages/post.js serait toujours déposée sur la page sur <Link> click. Commentez cette importation css, <Link> s aux articles de blog work perf. Décommentez et tous les <Link> ne parviennent pas à charger les articles de blog.

Accéder directement à l'un de ces itinéraires de page de blog fonctionne correctement, le bogue est uniquement lié au côté client routage basé sur. Cela s'est produit après la mise à niveau de la version 6 à la version 8.

J'ai d'abord frappé ceci avec @zeit/next-css mais je peux répliquer ce problème de la même manière après avoir échangé @zeit/next-sass et importé un fichier .scss. Pour l'instant, je ne fais que charger ces styles en utilisant styled-components drop @zeit/next-css . Après avoir examiné https://www.npmjs.com/package/@zeit/next -css et https://www.npmjs.com/package/@zeit/next -sass, il semble que ces exemples d'utilisation casseraient 🤔

Pourriez-vous ajouter un référentiel de reproduction à https://github.com/zeit/next-plugins/issues/282

Ce que vous décrivez ressemble exactement à ce problème.

Je peux obtenir que cela se reproduise de manière fiable dans les modes de développement, de production et d'exportation statique et aucune des solutions de contournement onDemandEntries ou de fichier css vide n'a aidé.

La seule façon de résoudre le problème était de supprimer import 'highlight.js/styles/color-brewer.css'; du composant Body sur les pages de mon blog.

Toute instance <Link> qui pointait vers une page d'article de blog échouerait à se charger mais http://localhost:3000/_next/static/development/pages/post.js serait toujours déposée sur la page sur <Link> click. Commentez cette importation css, <Link> s aux articles de blog work perf. Décommentez et tous les <Link> ne parviennent pas à charger les articles de blog.

Le fait d'accéder directement à l'un de ces itinéraires de page de blog fonctionne correctement, le bogue n'est lié qu'au routage côté client. Cela s'est produit après la mise à niveau de la version 6 à la version 8.

J'ai d'abord frappé ceci avec @zeit/next-css mais je peux répliquer ce problème de la même manière après avoir échangé @zeit/next-sass et importé un fichier .scss. Pour l'instant, je ne fais que charger ces styles en utilisant styled-components drop @zeit/next-css . Après avoir examiné https://www.npmjs.com/package/@zeit/next -css et https://www.npmjs.com/package/@zeit/next -sass, il semble que ces exemples d'utilisation cassent 🤔

Après avoir ajouté le package suivant / css, je peux confirmer que cela m'est arrivé également.

La même chose m'est arrivée en développement (la production fonctionne comme prévu), et le problème est lorsque nous lions vers des pages (ou avons des composants à l'intérieur) qui importent des fichiers SASS.

Mon fichier next.config.js :

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: {...},
  }),
);

Alors, l'un des composants en profondeur a cette importation:

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

Lorsque je commente l'importation, le lien commence à fonctionner. Cela semble donc être un problème avec le plugin withSass .

J'ai un problème similaire mais pas le même. Malheureusement, j'obtiens la même erreur
en production aussi. Mais pour certaines raisons, les liens fonctionnent parfois.

J'ai rencontré le même problème avec le prochain 9.4
J'ai ajouté CodeMirror hier à mon projet et aussi
import "codemirror/lib/codemirror.css"

J'ai quelque chose comme pages / page2.js qui fait des trucs puis appelle router.replace("/") à la fin de cela et il a soudainement arrêté de faire quoi que ce soit.
L'exécution de router.replace("/") dans le débogueur a montré une promesse qui ne résout ou n'atteint jamais les blocs catch ou finally .

Il est également intéressant de noter que j'ai next-css dans mon next.config.js - je vais essayer de le supprimer et voir si cela a un impact.

On dirait qu'il y a peut-être un correctif ici? =)

Aha, cela a résolu les choses pour moi - je devais évidemment aussi déplacer mon import dans un fichier shell _app.js .

Cette page vous a été utile?
0 / 5 - 0 notes