Next.js: Не могу ориентироваться в разработке (роутер зависает через некоторое время)

Созданный на 5 нояб. 2018  ·  50Комментарии  ·  Источник: vercel/next.js

Сообщение об ошибке

Опишите ошибку

Либо Link либо Router перестает работать при выполнении маршрутизации на стороне клиента. Похоже, HMR может прерывать переход между страницами. Чаще всего это происходит, если приложение какое-то время бездействует или находится в фоновом режиме (хотя я испытал это, когда щелкал мышью, когда оно не было в режиме ожидания)

Воспроизводить

Шаги по воспроизведению поведения, предоставьте фрагменты кода или репозиторий:

  1. Клонируйте это репо (https://github.com/malimccalla/next-routing-issue)
  2. Установить зависимости npm install
  3. Запускаем сервер npm run dev
  4. Посетите все страницы, нажав на ссылки
  5. Иди и сделай кофе (оставь страницу без дела ~ 2 минуты)
  6. Попытайтесь посетить все страницы, нажав на ссылки
  7. Некоторые ссылки не ведут на соответствующие страницы 😔

Ожидаемое поведение

Я ожидаю, что смогу посетить все отдельные страницы

Фактическое поведение

Страница не ведет к определенным маршрутам. Обновление страницы исправит это

Скриншоты

Ссылки "о себе" и "контакт" не работают (обратите внимание на журнал HMR при первой попытке каждого маршрута). После обновления страницы они работают должным образом. Если я снова оставлю приложение бездействующим примерно на 2 минуты, проблема начнется заново.

next-issue

Системная информация

  • mac Mojave 10.14
  • Хром
  • next.js v7.0.2

Дополнительный контекст

Открыв консоль, вы можете увидеть, что событие Router routeChangeStart срабатывает, но routeChangeComplete никогда не запускается.

Самый полезный комментарий

Я исследую эту проблему прямо сейчас.

Все 50 Комментарий

У меня такая же проблема

Я также вижу это в производственной среде, поэтому я не уверен, что HMR несет единоличную ответственность за проблему.

@ernerock Я развернул приведенный выше пример здесь, но проблема не возникает после запуска. Удалось ли вам воспроизвести в производственной среде?

@malimccalla Кажется, моя проблема отличается от вашей, однако поведение навигации такое же. Когда страница, на которую я перехожу, имеет импорт css

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

поведение навигации такое же, как вы сообщили. Кажется, проблема с '@ zeit / next-css'

Кажется, уже сообщается в # 5291, может быть временно «решено» путем импорта и пустого файла css в _app.js

@ernerock Очень странно, они могут быть связаны каким-то окольным путём!

Та же проблема, у меня есть страницы, настроенные как / home и / home / subpage, тогда, если я попытаюсь перейти из / home в / home / подстраницу с помощью Router.push, или с помощью Router HOC, или даже Link, это не сработает.

Хорошо, теперь у меня есть дополнительная информация, я попытался переименовать / home в / home / welcome, но описанный выше случай все еще не работает для меня

@ maciej-ka Ах, да, я могу подтвердить, что это тоже происходит с push это не просто Link . Изменим название, так как оно немного вводит в заблуждение.

@timneutkens Извините, @ you Я знаю, что есть много других проблем, но есть ли шанс, что мы сможем это

Скорее всего, это связано с записями по запросу и их удалением.

Я немного покопался, и, похоже, это происходит из-за удаления страниц. Как только этот журнал появляется, на удаленные страницы больше нельзя переходить

> Disposing inactive page(s): /

Сегодня у меня есть немного времени, чтобы заняться более глубоким погружением, и я надеюсь получить открытый PR, чтобы исправить это. @timneutkens Спасибо за первоначальное понимание, дайте мне знать, если вы думаете, что есть какая-то часть этого файла, на которую я должен обратить особое внимание

Я попытался исправить это, но в связанных файлах много чего происходит, и, к сожалению, я не смог полностью разобраться в этом. Для всех, у кого есть эта проблема, в качестве текущего обходного пути я использую эту конфигурацию в моем next.config.js чтобы продлить время до удаления страниц.

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

У меня тоже есть эта проблема.

Кто-то изучает это? У меня тоже есть эта проблема, но не обязательно на всех маршрутах. Случайно, какой маршрут / маршруты перестают отвечать, но в конечном итоге все они перестают отвечать.

Я не могу разобраться в этом прямо сейчас, поскольку я сосредоточен на проблеме следующего сервера / лямбда-выражений, но, скорее всего, это связано с записями по запросу.

Да, конечно. Происходит после утилизации.

То же самое со мной.

Может ли кто-нибудь подтвердить мне, что это не проблема в производстве?

Может ли кто-нибудь подтвердить мне, что это не проблема в производстве?

В режиме производства все в порядке, после того, как я изменил ENV на производство, все идет нормально

У меня это есть как в разработке, так и в производстве. Неважно, если страница неактивна и т. Д. Я могу загрузить новую версию, и она не будет работать. В dev консоль сервера
> Building page: /contact
WAIT Compling...
success client complied in 462ms
но страница никогда не отображается в клиенте. При этом на клиентской консоли:
[HMR] bundle rebuilding сообщение, тогда консоль сервера выдаст:
Disposing of inactive page(s): /, /contact

Если я наберу mysite.com/contact в браузере, он загрузится нормально.
Я пробовал обходиться в next.config.js из maxInactiveAge и pagesBufferLength безрезультатно.

[надеялся, что это просто в разработке, как многие говорили]

РЕДАКТИРОВАТЬ: у меня есть import 'node-mod/dist/theme.css в компоненте. Я переместил этот импорт в _app.js и Link работает.

Та же проблема, маршрут не завершается в режиме разработки после удаления. Это действительно раздражает.

@roytsang Вместо того, чтобы говорить «та же проблема», используйте 👍 по проблеме. Ваше руководство +1 не учитывается при сортировке по 👍

У меня такая же проблема. Это началось только сегодня, когда я начал использовать Head from next / head в своем _app для применения заголовка и значка.

@ Атмосферы пробовали ли вы @malimccalla ? Это не было полным исправлением, но сработало для меня как временное решение.

Я еще не дошел до этого, но скоро буду. Я просто подумал, что дополнительная информация о том, когда у меня возникла проблема, может быть полезна кому-то, кто ищет исправление.

Обновление: сегодня утром я проводил некоторые тесты, и вот что я обнаружил.

Проблемы начались вчера, единственная обновка, которую я реализовал, это Голова от next. Я понял, что изменил заголовок в _document, используемый для загрузки в стилях, на Head. Я также добавил Head в _app.js, чтобы установить заголовок и значок. Удаление Head в _app.js не помогло мне решить эту проблему. Удаление головы в _app и _document также не решило проблему. Я попробовал последнее: я вернул Head в _document к голове и оставил Head в _app, чтобы установить заголовок и значок, и теперь проблема исчезла.

Если по какой-либо причине проблема вернется, я обновлю здесь снова. Я надеюсь, что эта информация поможет исправить.

Обновление 2: проблема сохраняется, но возникает реже, чем это было раньше. Я заметил, что когда это происходит, я вижу, что тег скрипта, загружающий js для этой страницы, дублируется. Например, когда я впервые загружаю страницу "x", она добавляет

Можно ли сообщить нам, в чем заключалась проблема и как мы могли бы решить эту проблему, если мы не можем выполнить обновление прямо сейчас? Например, это связано с загрузкой css? Это что-то, что можно изменить в конфиге?

@ jon64digital Я написал полную рецензию на эту проблему в № 5994, вы можете обойти ее, увеличив лимит времени удаления.

@timneutkens я использую 8.1.1-canary.24 но ошибка все еще существует для меня. Есть идеи?

Изменить: выяснил, что происходит. Не уверен, почему ...:
У меня были файлы index.tsx и index.less. Я использовал cssModules в моем файле netxt.config.js (используя withLess). При загрузке /subpage и наличии ссылки, которая ссылается на / (которая импортирует стили вроде этого: import css from './index.less'; ), сценарий будет загружаться динамически ( http://localhost:3000/_next/static/development/pages/index.js ), но он не отображается. На самом деле URL-адрес вообще не меняется, он как будто завис ... Удаление less file import решило проблему.

Что делать?

Edit2: Кажется, я сталкиваюсь с https://github.com/zeit/next-plugins/issues/282

Я до сих пор иногда это случаю на 8.1.0 . Постараюсь воспроизвести и открыть новый выпуск

для меня тоже его не перейти к / около маршрута дает 404 каждый раз! не уверен, в чем проблема с маршрутизацией !? : /

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, пожалуйста, всегда предоставляйте полное воспроизведение. Невозможно заглянуть в "случается для меня"

@jsbimra, пожалуйста, _всегда_ предоставляйте полное воспроизведение. Невозможно заглянуть в "случается для меня"

обнаружил проблему, это было связано с отсутствием шага при создании страницы в папке страницы next.js, извините за беспокойство @timneutkens

любое решение для этого? это тоже происходит в производстве? потому что в dev это происходит со мной, ошибка с 2018 года и 22 мая 2019 года, эта ошибка еще не исправлена, если этого не происходит в производстве, меня это не беспокоит, но если это произойдет, то это действительно большая проблема ...

ошибка с 2018 года и 22 мая 2019 года, но эта ошибка не исправлена

На основании репродукции, предоставленной @malimccalla, это было исправлено.

если этого не происходит в производстве, меня это не волнует

Это не так.

Обратите внимание, что этот комментарий не решит вашу проблему. Как уже много раз говорилось ранее:

пожалуйста, всегда предоставляйте полное воспроизведение. Невозможно заглянуть в "случается для меня"

У меня такая же проблема с последней версией (8.1.0).

У меня такая же проблема с последней версией (8.1.0).

Я ответил примерно 3 раза одним и тем же сообщением. Пожалуйста, предоставьте репродукцию .

Обратите внимание, что этот комментарий не решит вашу проблему. Как уже много раз говорилось ранее:

пожалуйста, всегда предоставляйте полное воспроизведение. Невозможно заглянуть в "случается для меня"

Меня беспокоила проблема отсутствия доступа к ~ / index.tsx .
Но я наконец нашел причину!

Я использовал библиотеку под названием react-activity , но в то же время мне нужно было импортировать css.

Когда я дважды читаю один и тот же CSS в разных местах, мне кажется, что я не могу выполнить миграцию.
В результате чтения в _app.tsx я смог успешно выполнить миграцию.

@timneutkens хорошо, конечно, я могу увеличить время утилизации, но как насчет ситуации, когда сервер запускается в первый раз? Я не смогу перейти к этим страницам программно, потому что они еще не созданы. 🤔

Я ответил примерно 4 раза одним и тем же сообщением. Пожалуйста, предоставьте репродукцию .

Обратите внимание, что этот комментарий не решит вашу проблему. Как уже много раз говорилось ранее:

пожалуйста, всегда предоставляйте полное воспроизведение. Невозможно заглянуть в "случается для меня"

Чтобы ответить на конкретный вопрос, страницы создаются по запросу, и эта система отлично работает. Я предполагаю, что у вас есть что-то в вашей конфигурации, из-за чего webpack не запускает файл как готовую сборку. Однако сложно / невозможно сказать, потому что репродукции нет.

Также обратите внимание, что конкретная проблема, как упоминалось ранее, уже устранена, и что увеличение тайм-аута не помогает решить конкретную проблему, с которой вы столкнулись. Поэтому я и прошу репродукции 🙏.

Мы очень рады разобраться в этом и потратить на это время.

Вчера я создал новый проект, и он отлично работал. В моем проекте должно быть что-то конкретное, из-за чего он не работает. Позже сегодня я постараюсь постепенно разобрать его и посмотреть, когда проблема исчезнет.

Я бы с удовольствием посмотрел, сможете ли вы его достоверно воспроизвести.

Хорошая новость в том, что мне удалось точно определить ошибку. Плохая новость заключается в том, что проблема с моим проектом ничем не отличалась от того, о чем сообщили другие люди в этой ветке.

Итак, если проблема связана с CSS и лимитом удаления, и она предположительно была решена, я, должно быть, делаю что-то не так. Это куда вы положили?

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

Воспроизведение: https://github.com/dydokamil/next-js-router-bug

@dydokamil
Известная ошибка: https://github.com/zeit/next-plugins/issues/282
Вы можете "решить" эту проблему, импортировав пустой файл CSS.

Я могу заставить это надежно воспроизводиться в режимах разработки, производства и статического экспорта, и ни один из обходных путей onDemandEntries или пустого файла css не помог.

Единственный способ решить эту проблему - удалить import 'highlight.js/styles/color-brewer.css'; из компонента Body на страницах моих сообщений в блоге.

Любой экземпляр <Link> , указывающий на страницу сообщения в блоге, не загрузится, но http://localhost:3000/_next/static/development/pages/post.js все равно будет сброшен на страницу при нажатии <Link> . Закомментируйте этот импорт css, <Link> s, чтобы сообщения в блоге работали perf. Раскомментируйте, и все <Link> не смогут загрузить сообщения в блоге.

Нажатие на любой из этих маршрутов страницы сообщений в блоге напрямую работает нормально, ошибка связана только с клиентской стороной. маршрутизация на основе. Произошло это после обновления с версии 6 до версии 8.

Сначала я ударил это с помощью @zeit/next-css но я могу воспроизвести эту проблему таким же образом после замены @zeit/next-sass и импорта файла .scss. Пока я просто загружаю эти стили, используя styled-components drop @zeit/next-css . После просмотра https://www.npmjs.com/package/@zeit/next -css и https://www.npmjs.com/package/@zeit/next -sass кажется, что эти примеры использования сломаются 🤔

Не могли бы вы добавить репозиторий репродукций на https://github.com/zeit/next-plugins/issues/282

То, что вы описываете, похоже на эту проблему.

Я могу заставить это надежно воспроизводиться в режимах разработки, производства и статического экспорта, и ни один из обходных путей onDemandEntries или пустого файла css не помог.

Единственный способ решить эту проблему - удалить import 'highlight.js/styles/color-brewer.css'; из компонента Body на страницах моих сообщений в блоге.

Любой экземпляр <Link> , указывающий на страницу сообщения в блоге, не загрузится, но http://localhost:3000/_next/static/development/pages/post.js все равно будет сброшен на страницу при нажатии <Link> . Закомментируйте этот импорт css, <Link> s, чтобы сообщения в блоге работали perf. Раскомментируйте, и все <Link> не смогут загрузить сообщения в блоге.

Прямое попадание в любой из этих маршрутов страницы сообщений в блоге работает нормально, ошибка связана только с маршрутизацией на стороне клиента. Произошло это после обновления с версии 6 до версии 8.

Сначала я ударил это с помощью @zeit/next-css но я могу воспроизвести эту проблему таким же образом после замены @zeit/next-sass и импорта файла .scss. Пока я просто загружаю эти стили, используя styled-components drop @zeit/next-css . После просмотра https://www.npmjs.com/package/@zeit/next -css и https://www.npmjs.com/package/@zeit/next -sass кажется, что эти примеры использования сломаются 🤔

После добавления пакета next / css я могу подтвердить, что это случилось и со мной.

То же самое произошло со мной при разработке (производство работает, как ожидалось), и проблема в том, что мы ссылаемся на страницы (или располагаем внутри компонентами), которые импортируют файлы sass.

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

Итак, один из компонентов в глубине имеет этот импорт:

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

Когда я комментирую импорт, ссылка начинает работать. Так что, похоже, проблема с плагином withSass .

У меня похожая проблема, но не такая. К сожалению, у меня такая же ошибка
в производстве тоже. Но по некоторым причинам ссылки иногда работают.

Я столкнулся с той же проблемой со следующими 9.4
Вчера я добавил CodeMirror в свой проект, а также
import "codemirror/lib/codemirror.css"

У меня есть что-то вроде pages / page2.js, который что-то делает, затем вызывает router.replace("/") в конце и просто внезапно перестает что-либо делать.
Запуск router.replace("/") в отладчике показал обещание, которое никогда не разрешает и не достигает блоков catch или finally .

Также, возможно, стоит отметить, что у меня есть next-css в моем next.config.js - я попытаюсь удалить его и посмотреть, не повлияет ли это.

Похоже, здесь есть исправление? знак равно

Ага, это исправило для меня кое-что - мне, очевидно, также пришлось перенести мой импорт в файл оболочки _app.js .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги