Доброго! Сражаюсь уже второй вечер с одной довольно неосвещенной проблемой в 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 – сразу оставил, но без ответа пока что.