Vue + SSR webpackJsonp не определен - PullRequest
0 голосов
/ 05 декабря 2018

Я работаю над проектом Laravel, который использует VueJS.до того, как я развивался только в режиме предварительного рендерингасейчас проект почти готов.но я хотел поддержать SEO, поэтому начал переходить на SSR.Я сделал расширение PHP V8js.но проблема в webpack.mix.js

const { mix } = require('laravel-mix');
let webpack = require('webpack');
mix.setPublicPath('public');

mix
.js('./src/Packages/Front/Resource/assets/js/client.js', 'public/js')
.js('./src/Packages/Front/Resource/assets/js/server.js', 'public/js')

в этом коде, SSR без ошибок.

, но если я добавлю .extract (['jQuery']) после микширования.Ошибка js () будет выглядеть следующим образом.

V8Js::compileString():1: ReferenceError: webpackJsonp is not defined

Конечно, я добавил в этом порядке файлы

<script src="{{ mix('/js/manifest.js','uyghur') }}" type="text/javascript"></script>

 <script src="{{ mix('/js/vendor.js','uyghur') }}" type="text/javascript"></script>
 <script src="{{ mix('/js/client.js','uyghur') }}" type="text/javascript"></script>

Доза кто-нибудь знает, что именно эта ошибка?

это отнимает у меня много времени.уже занимает 3 дня.Я застрял здесь.

1 Ответ

0 голосов
/ 06 декабря 2018

Я не очень знаком с SSR с Laravel и Vue;но я хочу предложить не использовать экстракт, так как вы делаете SSR.Хотя ваша проблема может заключаться в том, чтобы выяснить, как заставить V8 загрузить весь Javascript перед его компиляцией.Позвольте мне привести некоторые аргументы и альтернативу, которые могут помочь при устранении неполадок:

  1. Причина, по которой вам нужен вывод в указанном порядке, потому что webpackJsonp - это микс, встроенный в manifest.js.Вы должны быть в состоянии найти эту функцию там.Поскольку вы не предоставили код v8, позвольте мне попытаться угадать его здесь:

$manifestSrc = File::get(public_path('js/manifest.js'));
$vendorSrc   = File::get(public_path('js/vendor.js'));
$appSrc      = File::get(public_path('js/entry-server.js'));

$allSrc = $manifestSrc . $vendorSrc . $appSrc;

$v8->executeString($allSrc);
С jQuery, вероятно, легче определить его как внешний, например:
mix.webpackConfig({
  externals: {
    'jquery': 'jQuery'
  }
 // other settings
})

Тогда вам не нужно беспокоиться о загрузке manifest.js и vendor.jsна стороне V8.

Обратите внимание: если вы используете jQuery для рендеринга на сервере, вы также должны добавить его на сервер в соответствии с приведенным выше примером.Это где я не в курсе.Я не уверен, что последние на V8js и jQuery, но они исторически не очень хорошо играют вместе.Люди склонны использовать NodeJS вместо V8js для использования jQuery на стороне сервера.

...