Next.js: Não é possível navegar no desenvolvimento (o roteador trava após algum tempo)

Criado em 5 nov. 2018  ·  50Comentários  ·  Fonte: vercel/next.js

Relatório de erro

Descreva o bug

Tanto Link quanto Router param de funcionar ao fazer o roteamento do lado do cliente. Parece que o HMR pode estar interrompendo a transição entre as páginas. Ocorre com mais frequência se o aplicativo for deixado ocioso ou em segundo plano por um tempo (embora eu tenha percebido isso acontecendo enquanto clicava sem estar ocioso)

Reproduzir

Etapas para reproduzir o comportamento, forneça snippets de código ou um repositório:

  1. Clone este repositório (https://github.com/malimccalla/next-routing-issue)
  2. Instale dependências npm install
  3. Execute o servidor npm run dev
  4. Visite todas as páginas clicando nos links
  5. Vá fazer um café (deixe a página inativa por cerca de 2 minutos)
  6. Tente visitar todas as páginas clicando nos links
  7. Certos links não navegam para suas respectivas páginas 😔

Comportamento esperado

Espero poder visitar todas as páginas individuais

Comportamento real

A página não navega para certas rotas. Atualizar a página irá consertar

Capturas de tela

Os links "sobre" e "contato" não funcionam (observe o log do HMR na primeira tentativa de cada rota). Após a atualização da página, eles funcionam conforme o esperado. Se eu deixar o aplicativo ocioso por cerca de 2 minutos novamente, ele reiniciará com o problema

next-issue

Informação do sistema

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

Contexto adicional

Com o console aberto, você pode ver que o evento do roteador routeChangeStart dispara, mas routeChangeComplete nunca dispara.

bug p1

Comentários muito úteis

Estou investigando esse problema agora.

Todos 50 comentários

Eu tenho o mesmo problema

Também estou vendo isso em um ambiente de produção, então não tenho certeza se o HMR é o único responsável pelo problema

@ernerock Implantei o exemplo acima aqui, mas o problema não parece ocorrer ao vivo. Você conseguiu reproduzir em um ambiente de produção?

@malimccalla Parece que meu problema é diferente do seu, porém o comportamento de navegação é o mesmo. Quando a página que navego tem uma importação de css

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

o comportamento de navegação é o mesmo que você relatou. Parece ser um problema com '@ zeit / next-css'

Parece já estar relatado em # 5291, pode ser 'resolvido' temporariamente importando e esvaziando o arquivo css em _app.js

@ernerock Muito estranho, eles podem estar relacionados de alguma forma indireta!

Mesmo problema aqui, tenho páginas configuradas como / home e / home / subpágina, então se eu tentar navegar de / home para / home / subpágina com Router.push, ou com Roteador HOC ou mesmo Link, não funcionará.

Ok, agora eu tenho mais algumas informações, tentei renomear / home para / home / welcome e o caso descrito acima ainda não funciona para mim

@ maciej-ka Ah sim, posso confirmar que também acontece com push , não é apenas Link . Vai mudar o título, pois é um pouco enganador.

@timneutkens Desculpe @ você, eu sei que há muitos outros problemas, mas há alguma chance de podermos dar uma

Provavelmente está relacionado a entradas sob demanda e seu descarte

Fiz uma pequena escavação e parece que aconteceu devido ao descarte das páginas. Assim que este log aparecer, as páginas descartadas não podem mais ser navegadas para

> Disposing inactive page(s): /

Eu tenho um pouco de tempo esta noite para fazer um mergulho mais profundo e espero conseguir um PR aberto para consertá-lo. @timneutkens Obrigado pelo insight inicial, deixe-me saber se você acha que há alguma parte desse arquivo que eu deveria estar olhando em particular

Eu tentei consertar isso, mas há muita coisa acontecendo nos arquivos relacionados e, infelizmente, não consegui chegar ao fundo disso. Para qualquer outra pessoa que tenha esse problema, como solução alternativa atual, estou usando essa configuração no meu next.config.js para estender a duração antes que as páginas sejam descartadas.

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

Eu também tenho esse problema.

Alguém está investigando isso? Eu também tenho esse problema, mas não necessariamente com todas as rotas. É aleatório quais rotas / rotas não respondem, mas todas acabam.

Não posso investigar isso agora, pois estou me concentrando no problema do próximo servidor / lambdas, mas provavelmente está relacionado a entradas sob demanda.

Sim, com certeza é. Acontece após o descarte.

O mesmo comigo.

Alguém pode confirmar para mim que este não é um problema na produção?

Alguém pode confirmar para mim que este não é um problema na produção?

No modo de produção está tudo bem, depois que eu mudei ENV para produção tudo está indo bem

Eu tenho isso em desenvolvimento e produção. Não importa se a página está inativa, etc. Posso ter um novo carregamento e não funcionará. No dev, o console do servidor
> Building page: /contact
WAIT Compling...
success client complied in 462ms
mas a página nunca é renderizada no cliente. Ao mesmo tempo, no console do cliente:
[HMR] bundle rebuilding mensagem, então o console do servidor fornece:
Disposing of inactive page(s): /, /contact

Se eu digitar mysite.com/contact no navegador, ele carregará perfeitamente.
Eu tentei contornar next.config.js de maxInactiveAge e pagesBufferLength sem sucesso.

[esperava que fosse apenas no desenvolvimento, como muitos diziam]

EDIT: Eu tinha import 'node-mod/dist/theme.css em um componente. Mudei essa importação para _app.js e esse Link está funcionando.

Mesmo problema aqui, a rota não é concluída no modo de desenvolvimento após o descarte. É realmente irritante.

@roytsang Em vez de dizer "mesmo problema", use 👍 no problema. Seu manual +1 não acaba sendo levado em consideração na classificação em 👍

Eu tenho o mesmo problema. Só começou hoje depois que comecei a usar Head from next / head em meu _app para aplicar um título e um favicon.

@Atmospheres , você tentou a solução alternativa @malimccalla ? Não foi uma solução total, mas funcionou para mim como uma solução alternativa.

Eu não tive tempo para isso ainda, mas irei em breve. Achei que mais informações sobre quando o problema surgiu para mim poderiam ser úteis para alguém procurando uma solução.

Atualização: Fiz alguns testes esta manhã e aqui está o que descobri.

Os problemas começaram ontem, a única coisa nova que implementei foi o Head from next. Percebi que mudei o head no _document, usado para carregar nos estilos, para Head. Também adicionei Head ao _app.js para definir o título e o favicon. Remover o Head em _app.js não corrigiu isso para mim. Remover Head em _app e _document também não resolveu o problema. Eu tentei uma última coisa, reverti Head in _document de volta para head e deixei Head in _app para definir o título e o favicon, e agora o problema foi resolvido.

Se por algum motivo o problema retornar, atualizarei aqui novamente. Espero que esta informação possa ajudar a resolver o problema.

Atualização 2: O problema persiste, embora apareça com menos frequência do que realmente aconteceu. Percebi que, quando isso acontece, vejo que a tag de script que carrega o js dessa página está duplicada. Por exemplo, na primeira vez que carrego a página "x", ela adiciona

É possível nos informar qual era o problema e como poderíamos solucionar o problema se não pudéssemos atualizar agora? Por exemplo, tem a ver com o carregamento de css? É algo que pode ser alterado na configuração?

@ jon64digital Escrevi um artigo completo sobre este problema em # 5994, você pode contornar isso aumentando o limite de tempo de descarte.

@timneutkens, estou usando 8.1.1-canary.24 e o bug ainda existe para mim. Qualquer ideia?

Edit: descobri o que está acontecendo. Não sei por que ...:
Eu tinha um arquivo index.tsx e index.less. Eu estava usando cssModules no meu arquivo netxt.config.js (usando withLess). Ao carregar um /subpage e ter um link que faz referência a / (que está importando estilos como este: import css from './index.less'; ), o script será carregado dinamicamente ( http://localhost:3000/_next/static/development/pages/index.js ), mas não é processado. Na verdade, o url não muda nada, é como se travasse ... Remover a importação de menos arquivos resolveu o problema.

O que fazer?

Edit2: Parece que estou entrando em https://github.com/zeit/next-plugins/issues/282

Eu ainda consigo fazer isso acontecer algumas vezes em 8.1.0 . Vou tentar reproduzir e abrir um novo problema

para mim também não é navegar para / sobre a rota dá 404 todas as vezes! não tenho certeza qual é o problema com o roteamento !? : /

Dependências de 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 forneça sempre uma reprodução completa. É impossível olhar para "acontece para mim"

@jsbimra por favor _sempre_ forneça uma reprodução completa. É impossível olhar para "acontece para mim"

encontrou um problema, ele estava relacionado à etapa ausente na criação de uma página na pasta de páginas de next.js, desculpe incomodar @timneutkens

alguma solução para isso? isso também acontece na produção? porque no dev está acontecendo comigo, o bug é de 2018 e 22 / maio / 2019 ainda esse bug não foi corrigido, se isso não acontecer na produção eu não estou tão preocupado, mas se acontecer então este é um problema muito grande ...

o bug é de 2018 e 22 / maio / 2019 ainda este bug não foi corrigido

Com base na reprodução fornecida por @malimccalla , foi corrigido.

se isso não acontecer na produção, não estou tão preocupado

Não é.

Observe que este comentário não vai resolver seu problema. Como disse muitas vezes antes:

forneça sempre uma reprodução completa. É impossível olhar para "acontece para mim"

Tenho o mesmo problema com a versão mais recente (8.1.0).

Tenho o mesmo problema com a versão mais recente (8.1.0).

Já respondi cerca de 3 vezes com a mesma mensagem exata. Forneça uma reprodução .

Observe que este comentário não vai resolver seu problema. Como disse muitas vezes antes:

forneça sempre uma reprodução completa. É impossível olhar para "acontece para mim"

Eu estava preocupado com o problema de não conseguir acessar ~ / index.tsx .
Mas finalmente encontrei a causa!

Usei uma biblioteca chamada react-activity , mas ao mesmo tempo precisei importar css.

Quando leio o mesmo css duas vezes em lugares diferentes, parece que não consigo migrar.
Como resultado da leitura em _app.tsx , consegui migrar com sucesso.

@timneutkens ok, claro, posso aumentar o tempo de descarte, mas e a situação em que o servidor é iniciado pela primeira vez? Não poderei navegar para essas páginas programaticamente porque ainda não foram criadas. 🤔

Já respondi cerca de 4 vezes com exatamente a mesma mensagem. Forneça uma reprodução .

Observe que este comentário não vai resolver seu problema. Como disse muitas vezes antes:

forneça sempre uma reprodução completa. É impossível olhar para "acontece para mim"

Para responder à pergunta específica, as páginas são criadas sob demanda e este sistema funciona bem. Presumo que você tenha algo em sua configuração que faz com que o webpack não acione o arquivo quando a construção for concluída. No entanto, é difícil / impossível dizer porque não há reprodução.

Observe também que o problema específico, conforme mencionado anteriormente, já foi corrigido e que aumentar o tempo limite não ajuda para o problema específico que você está enfrentando. É por isso que continuo pedindo uma reprodução 🙏.

Estamos muito felizes em investigar isso e dedicar nosso tempo a ele.

Eu criei um novo projeto ontem e funcionou muito bem. Tem que haver algo específico no meu projeto que o faça não funcionar. Vou tentar desmontá-lo gradualmente mais tarde hoje e ver em que ponto o problema desaparece.

Eu adoraria dar uma olhada se você pode reproduzi-lo de forma confiável.

A boa notícia é que consegui localizar o erro. A má notícia é que o problema com meu projeto não era diferente do que outras pessoas relataram neste tópico.

Então, se o problema é com CSS e limite de descarte, e supostamente foi resolvido, devo estar fazendo algo errado. É aqui que você colocou isso?

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

Reprodução: https://github.com/dydokamil/next-js-router-bug

@dydokamil
É um bug conhecido: https://github.com/zeit/next-plugins/issues/282
Você pode "resolver" importando um arquivo CSS vazio.

Posso fazer com que isso seja reproduzido de forma confiável nos modos de desenvolvimento, produção e exportação estática e nenhuma das onDemandEntries ou soluções alternativas de arquivo css vazio ajudaram.

A única maneira de resolver o problema era remover import 'highlight.js/styles/color-brewer.css'; do componente Corpo nas páginas de postagem do meu blog.

Qualquer <Link> instância que apontasse para uma página de postagem de blog não carregaria, mas http://localhost:3000/_next/static/development/pages/post.js ainda seria descartada na página ao clicar em <Link> . Comente que a importação de css, <Link> s para o desempenho do trabalho das postagens do blog. Remova o comentário e todos os <Link> s falham ao carregar as postagens do blog.

Acessar qualquer uma dessas rotas de página de postagem de blog diretamente funciona bem, o bug está relacionado apenas ao lado do cliente roteamento baseado em Isso aconteceu após a atualização da versão 6 para a versão 8.

Eu acertei isso inicialmente com @zeit/next-css mas posso replicar esse problema da mesma maneira depois de trocar @zeit/next-sass e importar um arquivo .scss. Por enquanto, vou apenas carregar esses estilos usando styled-components drop @zeit/next-css . Depois de revisar https://www.npmjs.com/package/@zeit/next -css e https://www.npmjs.com/package/@zeit/next -sass, parece que esses exemplos de uso falhariam 🤔

Você poderia adicionar um repositório de reprodução a https://github.com/zeit/next-plugins/issues/282

O que você está descrevendo parece exatamente com esse problema.

Posso fazer com que isso seja reproduzido de forma confiável nos modos de desenvolvimento, produção e exportação estática e nenhuma das onDemandEntries ou soluções alternativas de arquivo css vazio ajudaram.

A única maneira de resolver o problema era remover import 'highlight.js/styles/color-brewer.css'; do componente Corpo nas páginas de postagem do meu blog.

Qualquer <Link> instância que apontasse para uma página de postagem de blog não carregaria, mas http://localhost:3000/_next/static/development/pages/post.js ainda seria descartada na página ao clicar em <Link> . Comente que a importação de css, <Link> s para o desempenho do trabalho das postagens do blog. Remova o comentário e todos os <Link> s falham ao carregar as postagens do blog.

Acessar qualquer uma dessas rotas de página de postagem de blog diretamente funciona bem, o bug está relacionado apenas ao roteamento baseado no cliente. Isso aconteceu após a atualização da versão 6 para a versão 8.

Eu acertei isso inicialmente com @zeit/next-css mas posso replicar esse problema da mesma maneira depois de trocar @zeit/next-sass e importar um arquivo .scss. Por enquanto, vou apenas carregar esses estilos usando styled-components drop @zeit/next-css . Depois de revisar https://www.npmjs.com/package/@zeit/next -css e https://www.npmjs.com/package/@zeit/next -sass, parece que esses exemplos de uso falhariam 🤔

Depois de adicionar o próximo pacote / css, posso confirmar que isso também aconteceu comigo.

O mesmo aconteceu comigo no desenvolvimento (a produção funciona conforme o esperado), e o problema é quando ligamos para páginas (ou temos componentes dentro) que importam arquivos sass.

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

Então, um dos componentes em profundidade tem esta importância:

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

Quando comento a importação, o link começa a funcionar. Portanto, parece ser um problema com o plugin withSass .

Eu tenho um problema semelhante, mas não o mesmo. Infelizmente recebo o mesmo erro
na produção também. Mas, por alguns motivos, os links às vezes funcionam.

Eu encontrei o mesmo problema com o próximo 9.4
Eu adicionei CodeMirror ontem ao meu projeto e também
import "codemirror/lib/codemirror.css"

Eu tenho algo como pages / page2.js que faz algumas coisas, em seguida, chama router.replace("/") no final disso e de repente parou de fazer qualquer coisa.
A execução de router.replace("/") no depurador mostrou uma promessa que nunca resolve ou atinge os blocos catch ou finally .

Também possivelmente digno de nota é que eu tenho next-css em meu next.config.js - vou tentar removê-lo e ver se isso tem algum impacto.

Parece que talvez haja um hot fix aqui? =)

Aha, isso consertou as coisas para mim - obviamente também tive que mover minha importação para um arquivo shell _app.js .

Esta página foi útil?
0 / 5 - 0 avaliações