audunru/version-warning

当SPA用户使用过时的客户端时发出警告

v2.1.2 2024-08-25 08:17 UTC

README

Build Status Coverage Status StyleCI

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-varcross-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