安装
Livewire 是一个 Laravel 软件包,因此在安装和使用 Livewire 之前,您需要启动并运行一个 Laravel 应用程序。如果您需要帮助设置新的 Laravel 应用程序,请参阅官方 Laravel 文档。
要安装 Livewire,请打开您的终端并导航到您的 Laravel 应用程序目录,然后运行以下命令
composer require livewire/livewire
就是这样 — 真的是这样。如果您想要更多自定义选项,请继续阅读。否则,您可以直接开始使用 Livewire。
/livewire/livewire.js
返回 404 状态代码
默认情况下,Livewire 在您的应用程序中公开一个路由,以从以下位置提供其 JavaScript 资产:/livewire/livewire.js
。对于大多数应用程序来说,这很好,但是,如果您在使用具有自定义配置的 Nginx,您可能会从该端点收到 404。要解决此问题,您可以自行编译 Livewire 的 JavaScript 资产,或配置 Nginx 以允许这样做。
发布配置文件
Livewire 是“零配置”的,这意味着您可以按照惯例使用它,而无需任何其他配置。但是,如果需要,您可以通过运行以下 Artisan 命令来发布和自定义 Livewire 的配置文件
php artisan livewire:publish --config
这将在您的 Laravel 应用程序的config
目录中创建一个新的livewire.php
文件。
手动包含 Livewire 的前端资产
默认情况下,Livewire 会将它需要的 JavaScript 和 CSS 资产注入到包含 Livewire 组件的每个页面中。
如果您想更多地控制此行为,可以使用以下 Blade 指令手动在页面上包含资产
<html><head> ... @livewireStyles</head><body> ... @livewireScripts</body></html>
通过在页面上手动包含这些资源,Livewire 知道不要自动注入资源。
因为 Alpine 与 Livewire 的 JavaScript 资源捆绑在一起,所以你必须在希望使用 Alpine 的每个页面上包含 @livewireScripts
。即使你没有在该页面上使用 Livewire。
尽管很少需要,但你可以通过更新应用程序的 config/livewire.php
文件中的 inject_assets
配置选项 来禁用 Livewire 的自动注入资源行为
'inject_assets' => false,
如果你希望强制 Livewire 在单个页面或多个页面上注入其资源,你可以从当前路由或服务提供程序调用以下全局方法。
\Livewire\Livewire::forceAssetInjection();
配置 Livewire 的更新端点
Livewire 组件中的每次更新都会在以下端点向服务器发送网络请求:https://example.com/livewire/update
对于一些使用本地化或多租户的应用程序来说,这可能是一个问题。
在这些情况下,你可以根据需要注册自己的端点,只要你这样做是在 Livewire::setUpdateRoute()
内,Livewire 就会知道对所有组件更新使用此端点
Livewire::setUpdateRoute(function ($handle) { return Route::post('/custom/livewire/update', $handle);});
现在,Livewire 将向 /custom/livewire/update
发送组件更新,而不是使用 /livewire/update
。
因为 Livewire 允许你注册自己的更新路由,所以你可以声明任何你希望 Livewire 直接在 setUpdateRoute()
内使用的附加中间件
Livewire::setUpdateRoute(function ($handle) { return Route::post('/custom/livewire/update', $handle) ->middleware([...]); });
自定义资源 URL
默认情况下,Livewire 将从以下 URL 提供其 JavaScript 资源:https://example.com/livewire/livewire.js
。此外,Livewire 将像这样从脚本标记引用此资源
<script src="/livewire/livewire.js" ...
如果你的应用程序由于本地化或多租户而具有全局路由前缀,你可以注册自己的端点,Livewire 在获取其 JavaScript 时应在内部使用该端点。
要使用自定义 JavaScript 资源端点,你可以在 Livewire::setScriptRoute()
内注册自己的路由
Livewire::setScriptRoute(function ($handle) { return Route::get('/custom/livewire/livewire.js', $handle);});
现在,Livewire 将像这样加载其 JavaScript
<script src="/custom/livewire/livewire.js" ...
手动捆绑 Livewire 和 Alpine
默认情况下,Alpine 和 Livewire 使用 <script src="livewire.js">
标记加载,这意味着你无法控制加载这些库的顺序。因此,如以下示例所示,导入和注册 Alpine 插件将不再起作用
// Warning: This snippet demonstrates what NOT to do... import Alpine from 'alpinejs'import Clipboard from '@ryangjchandler/alpine-clipboard' Alpine.plugin(Clipboard)Alpine.start()
要解决此问题,我们需要告知 Livewire 我们希望自己使用 ESM(ECMAScript 模块)版本,并阻止注入 livewire.js
脚本标记。要实现此目的,我们必须将 @livewireScriptConfig
指令添加到我们的布局文件(resources/views/components/layouts/app.blade.php
)中
<html><head> <!-- ... --> @livewireStyles @vite(['resources/js/app.js'])</head><body> {{ $slot }} @livewireScriptConfig </body></html>
当 Livewire 检测到 @livewireScriptConfig
指令时,它将不会注入 Livewire 和 Alpine 脚本。如果你正在使用 @livewireScripts
指令来手动加载 Livewire,请务必将其删除。确保添加 @livewireStyles
指令(如果尚未存在)。
最后一步是在我们的 app.js
文件中导入 Alpine 和 Livewire,这允许我们注册任何自定义资源,并最终启动 Livewire 和 Alpine
import { Livewire, Alpine } from '../../vendor/livewire/livewire/dist/livewire.esm';import Clipboard from '@ryangjchandler/alpine-clipboard' Alpine.plugin(Clipboard) Livewire.start()
确保如果你正在手动捆绑 Livewire 和 Alpine,那么在你每次运行 composer update
时重新构建你的资源。
如果你正在手动捆绑 Livewire 和 AlpineJS,Laravel Mix 将不起作用。相反,我们建议你 切换到 Vite。
发布 Livewire 的前端资源
发布 Livewire 的资源对于 Livewire 运行不是必需的。只有在你有特定需要时才这样做。
如果你希望 JavaScript 资源由你的 Web 服务器提供,而不是通过 Laravel,请使用 livewire:publish
命令
php artisan livewire:publish --assets
为了保持资源是最新的并避免在未来更新中出现问题,我们强烈建议你将以下命令添加到你的 composer.json 文件中
{ "scripts": { "post-update-cmd": [ // Other scripts "@php artisan vendor:publish --tag=livewire:assets --ansi --force" ] }}