javascript - Vue + SSR webpackJsonp 未定义
问题描述
我正在开发一个使用 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天了。我被困在这里。
解决方案
我不太熟悉用 Laravel 和 Vue 做 SSR;但我想建议不要使用提取,因为你正在做 SSR。不过,您的问题可能只是在编译之前弄清楚如何让 V8 加载所有 Javascript。让我提供一些可能有助于您进行故障排除的推理和替代方法:
- 您需要输出按特定顺序排列的原因
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
})
那么你就不用担心在 V8 端 加载manifest.js
和加载了。vendor.js
请注意,如果您使用 jQuery 在服务器上进行渲染,那么您还必须按照上面的示例将其附加到服务器上。这是我没有更新的地方。我不确定 V8js 和 jQuery 的最新进展是什么,但它们在历史上并不能很好地配合使用。人们倾向于在服务器端使用 NodeJS 而不是 V8js 来使用 jQuery。