纯前端umi项目部署页面自动刷新

背景

在用户正在访问单页面网站的情况下,突然发布了新的版本。而由于单页面中路由特性,或浏览器缓存的原因,并不会随着路由变化而重新加载前端资源,此时用户浏览器所运行的脚本,并非是最新的代码,从而可能引发一些问题。因此所引发了思考。如何在后端部署之后,提醒用户系统的版本更新,并且引导用户刷新页面,获取最新资源。

纯前端实现思路

可通过前端接收最新的版本信息,并且与本地的登陆时所保存的版本信息来进行比较,可使用轮训、websocket等技术来完成。

唯一hash值

  1. hash文件的生成
    创建hash.js文件,生成一个唯一值用于标识当前版本

const crypto = require('crypto');
const fs = require('fs');
const data = crypto.randomBytes(16).toString('hex');
const hash = crypto.createHash('sha256').update(data).digest('hex');
fs.writeFile('./build/hash.txt', hash, (err) => {
  if (err) throw err;
});

修改package.json下的build命令

 "build": "umi run build && node ./hash.js",
  1. 判断时机

如果发版是在用户不常用的时间段,可以在浏览器visibility切换的回调 + 路由切换拦截时,这2个时机判断版本号,基本上完全够用了

//app.jsx
import request from 'umi-request';

const getHash = () => {
  return request(`/hash.txt`);
};
//umi里getInitialState函数用于项目初始化时获取用户信息,这个时机可以添加逻辑进行判断
export async function getInitialState() {
  const data = await getHash();
    document.addEventListener('visibilitychange', async () => {
      console.log(document.visibilityState);
      if (document.visibilityState === 'visible') {
        const newdata = await getHash();
        if (data !== newdata) {
          window.location.reload();
        }
      } 
    });

    return {
      collapsed: false,
      hash: data,
      userInfo: currentUserResult?.body || {},
    };
}
export const layout = ({ location, initialState, setInitialState }) => {
  return {
    onPageChange: async (location) => {
      const data = await getHash();
      if (data !== initialState.hash) {
        window.location.reload();
      }

    },
    onCollapse: (arg) => {
      setInitialState({
        ...initialState,
        collapsed: arg,
      });
    },
    ...initialState?.settings,
  };
};

纯前端umi项目部署页面自动刷新
原文链接:https://juejin.cn/post/7358665606914277376

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Linux上部署UMI项目,可以按照以下步骤进行操作: 1. 首先,确保你的Linux服务器上已经安装了Node.js和NPM。你可以通过运行以下命令来检查它们的版本: ``` node -v npm -v ``` 如果没有安装,请根据你的Linux发行版进行安装。 2. 克隆或上传你的UMI项目到Linux服务器上的目标目录。 3. 进入项目目录,并使用NPM或Yarn安装项目依赖。如果你使用NPM,可以运行以下命令: ``` cd /path/to/your/project npm install ``` 4. 在UMI项目根目录下创建一个文件名为 `.umirc.local.js` 的文件,并配置你的项目相关信息,如端口号、代理等。一个简单的示例配置如下: ```javascript export default { proxy: { '/api': { 'target': 'http://api.example.com', 'changeOrigin': true, 'pathRewrite': { '^/api' : '' }, }, }, // 更多配置... }; ``` 5. 使用UMI提供的构建命令将项目构建为静态文件。运行以下命令: ``` npm run build ``` 6. 完成构建后,你将在项目根目录下生成一个 `dist` 文件夹,里面包含了构建好的静态文件。 7. 最后,你可以使用任何你喜欢的Web服务器软件(如Nginx)来提供静态文件服务。配置服务器软件,使其指向你项目根目录下的 `dist` 文件夹即可。 这样,你的UMI项目就成功部署在Linux服务器上了。你可以通过访问服务器的IP地址或域名来访问项目。记得在部署过程中根据实际情况进行相应的配置修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值