我正在使用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天了。 我被困在这里。
答案 0 :(得分:0)
我对与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。