Vue + SSR webpackJsonp未定义

时间:2018-12-05 12:34:46

标签: javascript webpack laravel-mix ssr

我正在使用VueJS开发Laravel项目。 在我仅以预渲染方式进行开发之前。现在项目几乎完成了。 但我想支持SEO,因此开始转向SSR。 我已经完成了V8js PHP扩展。 但是问题出在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没有错误。

但是如果我在mix.js()错误之后添加.extract(['jQuery']),将会像这样。

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 :(得分:0)

我对与Laravel和Vue进行SSR不太熟悉;但我建议您不要使用提取,因为您正在执行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);

  1. 使用jQuery,将其定义为外部可能更容易,例如:
mix.webpackConfig({
  externals: {
    'jquery': 'jQuery'
  }
 // other settings
})

那么您就不必担心在V8端同时加载manifest.jsvendor.js了。

请注意,如果您使用jQuery在服务器上进行渲染,则还必须按照上述示例将其附加到服务器上。这不是我最新的信息。我不确定V8js和jQuery上的最新版本,但从历史上看,它们不能很好地配合使用。人们倾向于在服务器端使用NodeJS而不是V8js来实现jQuery。