vikkyshostak
@vikkyshostak
< This head full of dreams.

Как заставить работать скрипты при SSR (server-side rendering), которые работают только через document/window (Vue.js)?

Доброго! Сражаюсь уже второй вечер с одной довольно неосвещенной проблемой в Nuxt.js: как заставить работать скрипты (и другие пакеты из npm) при server-side rendering (SSR), которые работают только через document/window?

Добавляю все подобные пакеты в build.vendor[] файла nuxt.config.js (всё по мануалу). Вот, например, пакет моего сочинения – https://github.com/koddr/goodbackground.js – при обновлении страницы (cmd+R) всё работает как надо, но только начинаю ходить по приложению (через ссылки <nuxt-link to="..."></nuxt-link>) – постоянно показывает вот такой красный Vue.js error:

ReferenceError: document is not defined
    at t.value (node_modules/goodbackground.js/goodbackground.min.js:1:1392)
    at Object.<anonymous> (node_modules/goodbackground.js/goodbackground.min.js:1:2432)
    at e (node_modules/goodbackground.js/goodbackground.min.js:1:163)
    at node_modules/goodbackground.js/goodbackground.min.js:1:546
    at Object.<anonymous> (node_modules/goodbackground.js/goodbackground.min.js:1:555)
    at Module._compile (module.js:556:32)
    at Object.Module._extensions..js (module.js:565:10)
    at Module.load (module.js:473:32)
    at tryModuleLoad (module.js:432:12)
    at Function.Module._load (module.js:424:3)

Так-то, да, просто выключить этот пакет с помощью исключения if (process.BROWSER_BUILD) {...}, но что, если этот пакет отвечает за UI или внешний вид, как в моём примере?

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

Прошу помощи и совета!

P.S. issue в репозитории Nuxt.js – сразу оставил, но без ответа пока что.
  • Вопрос задан
  • 1732 просмотра
Пригласить эксперта
Ответы на вопрос 1
AMar4enko
@AMar4enko
Вы что-то путаете. Пакет, работающий с document или window, не должен быть включен в серверную сборку. Зато как раз на клиенте он должен стартовать и делать свои дела. А у вас почему-то написано наоборот
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы