audunru / version-warning
当SPA用户使用过时的客户端时发出警告
Requires
- php: ^8.2
- laravel/framework: ^11.0
- spatie/laravel-package-tools: ^1.9
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- orchestra/testbench: ^9.0
- php-coveralls/php-coveralls: ^2.2
- phpmd/phpmd: ^2.10
- phpunit/phpunit: ^11.0
- roave/security-advisories: dev-latest
This package is auto-updated.
Last update: 2024-09-25 08:28:56 UTC
README
Laravel中间件,帮助您通知正在使用SPA客户端旧版本的用户。
当您将SPA的新版本部署到服务器时,并非所有用户都会立即开始使用新版本。任何已经登录且未刷新页面的用户将继续使用旧客户端,直到他们关闭浏览器标签或刷新页面。本包旨在帮助您通知使用过时客户端的用户,提醒他们重新加载以使用最新版本。
目前,该包从根目录下的package.json
文件获取版本信息。这意味着每次您进行需要所有客户端更新的更改时,都必须更新package.json文件中的版本。
安装
步骤1:使用Composer安装
composer require audunru/version-warning
步骤2:将中间件添加到路由中
将VersionWarning
中间件添加到您的API路由中
'api' => [ 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, \audunru\VersionWarning\Middleware\VersionWarning::class, ],
步骤3:当客户端过时时通知用户
替代方案A:客户端比较X-App-Version头部
当您向服务器发出获取请求时,添加一个值为客户端当前版本的X-App-Version
头部。例如:X-App-Version: 1.18.1
。
VersionWarning
中间件将比较客户端版本与服务器版本,如果不匹配,则将名为X-Version-Warning
的头部添加到响应中。
在客户端,您应该检查是否存在X-Version-Warning
头部。如果存在,应通知用户需要重新加载,以便加载最新的客户端资源(JavaScript和CSS)。
替代方案B:客户端比较X-App-Version头部
VersionWarning
中间件将名为X-App-Version
的头部添加到响应中。在客户端,您可以比较此版本与客户端版本,并在版本不匹配时通知用户。
客户端正在运行哪个版本?
在构建时设置客户端版本
如果您正在使用Laravel Mix,您可以在构建时间包含当前版本。
在构建脚本中设置MIX_VERSION环境变量(您应该安装cross-var和cross-env包,以便在Mac/Windows上都有效)
"production": "cross-var cross-env MIX_VERSION=$npm_package_version mix --production",
然后您可以在前端代码中使用process.env.MIX_VERSION
。
从HTML元标签获取客户端版本
将以下内容添加到您的布局blade模板中
<meta name="app-version" content="{{ app_version() }}" />
在您的前端代码中,读取此元标签的值。
配置
通过运行以下命令发布配置文件
php artisan vendor:publish --tag=version-warning-config
开发
测试
运行测试
composer test