Next.js: No se puede navegar en desarrollo (el enrutador se bloquea después de un tiempo)

Creado en 5 nov. 2018  ·  50Comentarios  ·  Fuente: vercel/next.js

Informe de error

Describe el error

O Link o Router dejan de funcionar cuando se realiza el enrutamiento del lado del cliente. Parece que HMR puede estar interrumpiendo la transición entre páginas. Ocurre con mayor frecuencia si la aplicación se deja inactiva o en segundo plano durante un tiempo (aunque he experimentado que sucedía mientras hacía clic sin que estuviera inactiva)

Reproducir

Pasos para reproducir el comportamiento, proporcione fragmentos de código o un repositorio:

  1. Clone este repositorio (https://github.com/malimccalla/next-routing-issue)
  2. Instalar dependencias npm install
  3. Ejecute el servidor npm run dev
  4. Visite todas las páginas haciendo clic en los enlaces
  5. Ve a hacer un café (deja la página inactiva durante ~ 2 minutos)
  6. Intente visitar todas las páginas haciendo clic en los enlaces
  7. Ciertos enlaces no navegan a su página respectiva 😔

Comportamiento esperado

Espero poder visitar todas las páginas individuales

Comportamiento real

La página no navega a determinadas rutas. Actualizar la página lo solucionará

Capturas de pantalla

Los enlaces "acerca de" y "contacto" no funcionan (observe el registro HMR en el primer intento de cada ruta). Después de una actualización de página, funcionan como se esperaba. Si dejo la aplicación inactiva durante aproximadamente 2 minutos nuevamente, comenzará de nuevo con el problema

next-issue

Información del sistema

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

Contexto adicional

Con la consola abierta, puede ver que el evento Router routeChangeStart activa pero routeChangeComplete nunca lo hace.

bug p1

Comentario más útil

Estoy investigando este problema en este momento.

Todos 50 comentarios

Tengo el mismo problema

También veo esto en un entorno de producción, por lo que no estoy seguro de que HMR sea el único responsable del problema.

@ernerock Implementé el ejemplo anterior aquí, pero el problema no parece ocurrir una vez en vivo. ¿Pudo reproducir en un entorno de producción?

@malimccalla Parece que mi problema es diferente al tuyo, sin embargo, el comportamiento de navegación es el mismo. Cuando la página a la que navego tiene una importación css

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

el comportamiento de navegación es el mismo que informó. Parece ser un problema con '@ zeit / next-css'

Parece que ya se informó en # 5291, se puede 'resolver' temporalmente importando un archivo css vacío en _app.js

@ernerock Muy extraño, ¡pueden estar relacionados de alguna manera indirecta!

El mismo problema aquí, tengo páginas configuradas como / home y / home / subpage, luego si intento navegar desde / home a / home / subpage con Router.push, o con Router HOC o incluso Link, no funciona.

Bien, ahora tengo más información, intenté cambiar el nombre de / home a / home / welcome y el caso descrito anteriormente todavía no funciona para mí

@ maciej-ka Ah, sí, puedo confirmar que también sucede con push , no es solo Link . Cambiará el título, ya que es un poco engañoso.

@timneutkens Lo siento, sé que hay

Es muy probable que esté relacionado con las entradas bajo demanda y su eliminación.

Investigué un poco y parece que sucede debido a que las páginas se desechan. Tan pronto como aparezca este registro, ya no se podrá navegar a las páginas eliminadas.

> Disposing inactive page(s): /

Tengo un poco de tiempo esta noche para hacer una inmersión más profunda y, con suerte, puedo abrir un PR para solucionarlo. @timneutkens Gracias por la información inicial, avíseme si cree que hay alguna parte de ese archivo que debería ver en particular

Eché un vistazo a intentar solucionar este problema, pero están sucediendo muchas cosas en los archivos relacionados y, desafortunadamente, no pude llegar al fondo. Para cualquier otra persona que tenga este problema, como solución alternativa actual, estoy usando esta configuración en mi next.config.js para extender la duración antes de que las páginas se eliminen.

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

Yo también tengo este problema.

¿Alguien está investigando esto? También tengo este problema pero no necesariamente a todas las rutas. Es aleatorio qué ruta / rutas dejan de responder, pero todas eventualmente lo hacen.

No puedo investigarlo en este momento ya que me estoy enfocando en el problema del siguiente servidor / lambdas, pero lo más probable es que esté relacionado con las entradas bajo demanda.

Sí, seguro que lo es. Ocurre después de desechar.

Lo mismo conmigo.

¿Alguien puede confirmarme que esto no es un problema de producción?

¿Alguien puede confirmarme que esto no es un problema de producción?

En el modo de producción está bien, después de cambiar ENV a producción, todo va bien.

Tengo esto tanto en desarrollo como en producción. No importa si la página está inactiva, etc. Puedo tener una nueva carga y no funcionará. En dev, la consola del servidor
> Building page: /contact
WAIT Compling...
success client complied in 462ms
pero la página nunca se muestra en el cliente. Al mismo tiempo, en la consola del cliente:
[HMR] bundle rebuilding mensaje, luego la consola del servidor da:
Disposing of inactive page(s): /, /contact

Si escribo mysite.com/contact en el navegador, se cargará bien.
Probé el trabajo en next.config.js de maxInactiveAge y pagesBufferLength sin éxito.

[esperaba que fuera solo en desarrollo, como muchos decían]

EDITAR: Tenía un import 'node-mod/dist/theme.css en un componente. Moví esa importación a _app.js y ese Link está funcionando.

El mismo problema aquí, la ruta no se completa en modo dev después de desechar. Es realmente molesto.

@roytsang En lugar de decir "mismo problema", usa 👍 sobre el tema. Su +1 manual no termina siendo tomado en cuenta al ordenar 👍

Tengo el mismo problema. Solo comenzó hoy después de que comencé a usar Head from next / head en mi _app para aplicar un título y un favicon.

@Atmospheres, ¿ ha probado la solución alternativa de @malimccalla ? No fue una solución total, pero funcionó para mí como una solución.

Todavía no lo he logrado, pero pronto lo haré. Solo pensé que más información sobre cuándo surgió el problema para mí podría ser útil para alguien que busque una solución.

Actualización: He estado haciendo algunas pruebas esta mañana y esto es lo que encontré.

Los problemas comenzaron ayer, lo único nuevo que había implementado es el Head from next. Me di cuenta de que cambié el encabezado en _document, que solía cargar en estilos, por el encabezado. También agregué Head a _app.js para establecer el título y el favicon. Eliminar Head en _app.js no solucionó este problema. La eliminación de Head tanto en _app como en _document tampoco resolvió el problema. Probé una última cosa, volví Head en _document al revés y dejé Head en _app para establecer el título y el favicon, y ahora el problema desapareció.

Si por alguna razón el problema vuelve, lo actualizaré aquí nuevamente. Espero que esta información pueda ayudar a solucionarlo.

Actualización 2: el problema persiste, aunque surge con menos frecuencia de lo que lo hizo. Me he dado cuenta de que cuando sucede, veo que la etiqueta de script que carga el js para esa página está duplicada. Por ejemplo, la primera vez que cargo la página "x", agrega

¿Es posible informarnos cuál fue el problema y cómo podríamos solucionarlo si no podemos actualizar en este momento? Por ejemplo, ¿tiene que ver con la carga de CSS? ¿Es algo que se puede cambiar en la configuración?

@ jon64digital Escribí una descripción completa de este problema en el número 5994, podría solucionarlo aumentando el límite de tiempo de eliminación.

@timneutkens estoy usando 8.1.1-canary.24 y el error todavía existe para mí. ¿Alguna idea?

Editar: descubra lo que está pasando. No estoy seguro de por qué aunque ...:
Tenía un archivo index.tsx e index.less. Estaba usando cssModules en mi archivo netxt.config.js (usando withLess). Al cargar un /subpage y tener un enlace que hace referencia a / (que está importando estilos como este: import css from './index.less'; ), el script se cargará dinámicamente ( http://localhost:3000/_next/static/development/pages/index.js ) pero no se representa. De hecho, la URL no cambia en absoluto, está como atascada ... Eliminar la importación de menos archivos resolvió el problema.

¿Qué hacer?

Edit2: Parece que me estoy encontrando con https://github.com/zeit/next-plugins/issues/282

Todavía sigo sucediendo esto algunas veces también en 8.1.0 . Intentaré reproducir y abrir una nueva edición.

¡Para mí también no es navegar hacia / sobre la ruta da 404 cada vez! ¿No estás seguro de cuál es el problema con el enrutamiento? : /

dependencias 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 , proporcione siempre una reproducción completa. Es imposible investigar "me pasa"

@jsbimra por favor _siempre_ proporcione una reproducción completa. Es imposible investigar "me pasa"

encontró un problema, estaba relacionado con el paso que faltaba en la creación de una página en la carpeta de páginas de next.js, lamento molestar a @timneutkens

alguna solución para esto? ¿Ocurre esto también en producción? porque en desarrollo me está sucediendo, el error es de 2018 y el 22 de mayo de 2019 todavía este error no se ha solucionado, si esto no sucede en producción, no estoy tan preocupado, pero si sucede, entonces esto es un problema realmente grande ...

el error es de 2018 y el 22 de mayo de 2019 todavía este error no se ha solucionado

En base a la reproducción proporcionada por @malimccalla, se ha corregido.

si esto no sucede en producción, no me preocupa tanto

No es así.

Tenga en cuenta que este comentario no resolverá su problema. Como dije muchas veces antes:

proporcione siempre una reproducción completa. Es imposible investigar "me pasa"

Tengo el mismo problema con la última versión (8.1.0).

Tengo el mismo problema con la última versión (8.1.0).

Ahora he respondido unas 3 veces con exactamente el mismo mensaje. Proporcione una reproducción .

Tenga en cuenta que este comentario no resolverá su problema. Como dije muchas veces antes:

proporcione siempre una reproducción completa. Es imposible investigar "me pasa"

Estaba preocupado por el problema de no poder acceder a ~ / index.tsx .
¡Pero finalmente encontré la causa!

Usé una biblioteca llamada react-activity , pero al mismo tiempo necesitaba importar css.

Cuando leo el mismo CSS dos veces en diferentes lugares, parece que no puedo migrar.
Como resultado de leer en _app.tsx , pude migrar con éxito.

@timneutkens está bien, claro, puedo aumentar el tiempo de eliminación, pero ¿qué pasa con la situación en la que el servidor se inicia por primera vez? No podré navegar a esas páginas de forma programática porque aún no están creadas. 🤔

Ahora he respondido unas 4 veces con el mismo mensaje exacto. Proporcione una reproducción .

Tenga en cuenta que este comentario no resolverá su problema. Como dije muchas veces antes:

proporcione siempre una reproducción completa. Es imposible investigar "me pasa"

Para responder a la pregunta específica, las páginas se crean a pedido y este sistema funciona bien. Supongo que tiene algo en su configuración que hace que el paquete web no active el archivo como construcción terminada. Sin embargo, es difícil / imposible de decir porque no hay reproducción.

También tenga en cuenta que el problema específico, como se mencionó anteriormente, ya se solucionó y que aumentar el tiempo de espera no ayuda para el problema específico que está experimentando. De ahí por qué sigo pidiendo una reproducción.

Estamos muy felices de investigar esto y dedicar tiempo a ello.

Ayer creé un nuevo proyecto y funcionó bien. Tiene que haber algo específico en mi proyecto que hace que no funcione. Intentaré desarmarlo gradualmente más tarde hoy y veré en qué punto desaparece el problema.

Me encantaría echarle un vistazo si puede reproducirlo de manera confiable.

La buena noticia es que pude identificar el error. La mala noticia es que el problema con mi proyecto no fue diferente a lo que otras personas, en este hilo, han informado.

Entonces, si el problema es con CSS y el límite de eliminación, y supuestamente se ha resuelto, debo estar haciendo algo mal. ¿Es aquí donde pones estos?

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

Reproducción: https://github.com/dydokamil/next-js-router-bug

@dydokamil
Es un error conocido: https://github.com/zeit/next-plugins/issues/282
Puede "solucionarlo" importando un archivo CSS vacío.

Puedo hacer que esto se reproduzca de manera confiable en los modos de desarrollo, producción y exportación estática y ninguna de las soluciones alternativas onDemandEntries o del archivo CSS vacío ayudó.

La única forma de solucionar el problema era eliminar import 'highlight.js/styles/color-brewer.css'; del componente Body en las páginas de mi blog.

Cualquier instancia de <Link> que apunte a una página de publicación de blog no se cargaría, pero http://localhost:3000/_next/static/development/pages/post.js aún se dejaría caer en la página en <Link> clic. Comente que la importación de css, <Link> s a las publicaciones del blog funcionan perf. Descomenta y todos los <Link> s no pueden cargar las publicaciones del blog.

Acceder directamente a cualquiera de esas rutas de la página de publicación de blog funciona bien, el error solo está relacionado con el lado del cliente -enrutamiento basado en. Esto sucedió después de actualizar de la versión 6 a la versión 8.

Inicialmente golpeé esto con @zeit/next-css pero puedo replicar este problema de la misma manera después de intercambiar @zeit/next-sass e importar un archivo .scss. Por ahora, solo voy a cargar estos estilos usando styled-components drop @zeit/next-css . Después de revisar https://www.npmjs.com/package/@zeit/next -css y https://www.npmjs.com/package/@zeit/next -sass, parece que esos ejemplos de uso se romperían 🤔

¿Podría agregar un repositorio de reproducción a https://github.com/zeit/next-plugins/issues/282

Lo que estás describiendo suena exactamente como ese problema.

Puedo hacer que esto se reproduzca de manera confiable en los modos de desarrollo, producción y exportación estática y ninguna de las soluciones alternativas onDemandEntries o del archivo CSS vacío ayudó.

La única forma de solucionar el problema era eliminar import 'highlight.js/styles/color-brewer.css'; del componente Body en las páginas de mi blog.

Cualquier instancia de <Link> que apunte a una página de publicación de blog no se cargaría, pero http://localhost:3000/_next/static/development/pages/post.js aún se dejaría caer en la página en <Link> clic. Comente que la importación de css, <Link> s a las publicaciones del blog funcionan perf. Descomenta y todos los <Link> s no pueden cargar las publicaciones del blog.

Acceder directamente a cualquiera de esas rutas de la página de publicación de blog funciona bien, el error solo está relacionado con el enrutamiento basado en el lado del cliente. Esto sucedió después de actualizar de la versión 6 a la versión 8.

Inicialmente golpeé esto con @zeit/next-css pero puedo replicar este problema de la misma manera después de intercambiar @zeit/next-sass e importar un archivo .scss. Por ahora, solo voy a cargar estos estilos usando styled-components drop @zeit/next-css . Después de revisar https://www.npmjs.com/package/@zeit/next -css y https://www.npmjs.com/package/@zeit/next -sass, parece que esos ejemplos de uso se romperían 🤔

Después de agregar el paquete next / css, puedo confirmar que esto también me sucedió.

A mí me pasó lo mismo en el desarrollo (la producción funciona como se esperaba), y el problema es cuando enlazamos a páginas (o tenemos componentes dentro) que importan archivos sass.

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

Entonces, uno de los componentes en profundidad tiene esta importación:

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

Cuando comento la importación, el enlace comienza a funcionar. Entonces parece ser un problema con el complemento withSass .

Tengo un problema similar pero no el mismo. Lamentablemente recibo el mismo error
en producción también. Pero, por algunas razones, los enlaces funcionan a veces.

He encontrado el mismo problema con la próxima 9.4
Ayer agregué CodeMirror a mi proyecto y también
import "codemirror/lib/codemirror.css"

Tengo algo como pages / page2.js que hace algunas cosas y luego llama a router.replace("/") al final de eso y de repente dejó de hacer nada.
La ejecución de router.replace("/") en el depurador mostró una promesa que nunca se resuelve o golpea los bloques catch o finally .

También es posible que valga la pena señalar que tengo next-css en mi next.config.js; intentaré eliminarlo y ver si eso tiene algún impacto.

¿Parece que aquí hay una solución urgente? =)

Ajá, eso me solucionó las cosas; obviamente, también tuve que mover mi importación a un archivo shell _app.js también.

¿Fue útil esta página
0 / 5 - 0 calificaciones