Vuejs SSR, Laravel и PHP V8J выпускают "окно не определено" - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь отобразить код на стороне сервера при загрузке страницы, следуя https://medium.com/js-dojo/advanced-server-side-rendering-with-laravel-vue-multi-page-app-486b706e654.Все работает нормально, но когда я пытаюсь использовать глобальную переменную "window" или "document"

, мой app.js код

import App from './components/App.vue';
import Vue from 'vue';
import { createRouter } from './router'
import { createStore } from './store'
import { sync } from 'vuex-router-sync'
require('./bootstrap');

bootstrap.js нормальный как

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

Мне нужны axios глобально, но php V8Js выдает ошибку V8Js::compileString():612: TypeError: window is undefined

Я обнаружил, что V8Js не имеет переменных браузера, и я попытался использовать пакет npm browser-env, но получил ту же ошибку.смотрите скриншот http://nimb.ws/zGDmXO

Спасибо

1 Ответ

0 голосов
/ 13 августа 2018

вам нужно избавиться от windows и document, используя для строки JS, которую вы передаете V8Js::executeString, потому что она ищет document и window, но в то время ее не существуети код выполняется на стороне сервера.

В вашем app.js Сделайте что-то вроде этого:

import axios from 'axios';
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

и на бэкэнде сделайте так:

$rendererSrc =\file_get_contents()(\base_path('node_modules/vue-server-renderer/basic.js'));
$appSrc = file_get_contents()(\public_path('js/entry-server.js'));
$v8Js = new \V8Js();
$v8Js->executeString(
                <<<EOT
    var process = { env: { VUE_ENV: "server", NODE_ENV: "production" } }; 
    this.global = { process: process };
    var url = "path_you_are_hitting";
    {$rendererSrc}
    {$appSrc}
EOT
);

Надеюсь, это сработает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...