当前位置:首页 » 《资源分享》 » 正文

前端项目打包后无法加载动态资源(Failed to fetch dynamically imported module)

19 人参与  2024年10月11日 13:20  分类 : 《资源分享》  评论

点击全文阅读


1、问题描述

前端项目打包到生产环境,用户在页面操作时会出现页面报错,无法加载动态资源的错误,但是刷新一下就可以了

2、原因

因为版本更新导致客户端与最新的版本不一致,存在资源未更新的情况,用户在使用的过程中停留在某个页面,没有刷新重新获取资源,就会导致报错

3、解决方法(纯前端,目前来说比较简单的解决方法)

解决思路:通过调用fs库的方法在打包时创建version.json保存版本号,同时在localStorage存储版本号信息,通过对比版本号是否一致强制刷新页面,获取最新的资源防止报错。

第一步:在根目录下创建build文件夹和build.js文件

第二步:在build.js中添加以下代码

// console.log("build---->文件开始执行!");import fs from "fs";import path from "path";function getRootPath(...dir) {  return path.resolve(process.cwd(), ...dir);}const runBuild = async () => {  try {    const OUTPUT_DIR = "dist";    const VERSION = "version.json";    const versionJson = {      version: "V_" + Math.floor(Math.random() * 10000) + Date.now(),    };    fs.writeFileSync(      getRootPath(`${OUTPUT_DIR}/${VERSION}`),      JSON.stringify(versionJson)    );    // console.log(`version file is build successfully!`);  } catch (error) {    // console.error("version build error:\n" + error);    process.exit(1);  }};runBuild();// console.log("build---->文件执行结束!");

第三步:src/router/index.ts 在路由中添加跳转前的判断

注意:添加import.meta.env.VITE_ENV === "PRODUCTION"判断是否为生产环境,开发环境不需要刷新获取资源,登录页也不需要,注意排除,否则会导致用户停留在登录页时,会造成重复登录

import axios from "axios";router.beforeEach((to, from, next) => {  ...    if (from.path !== "/" && import.meta.env.VITE_ENV === "PRODUCTION") {      checkAppNewVersion();    }  ...});// 监听页面打开显示document.addEventListener("visibilitychange", function () {  if (!document.hidden) {    if (import.meta.env.VITE_ENV === "PRODUCTION") {      checkAppNewVersion();    }  }});// 检查服务端是否已经更新,如果更新刷新页面async function checkAppNewVersion() {  const url = `/version.json?t=${Date.now()}`;  let res = null;  try {    res = await axios.get(url);  } catch (err) {    console.error("checkAppNewVersion error: ", err);  }  if (!res) return;  const version = res.data.version;  if (version && version !== localStorage.getItem("version")) {    localStorage.setItem("version", version);    window.location.reload();  }  localStorage.setItem("version", version);}

第四步:package.json 配置打包时执行build.js文件

"type": "module",  "scripts": {    "dev": "-----",    "build": "vite build && node ./build/build.js",    "preview": "------"  },

第五步:准备摸鱼


点击全文阅读


本文链接:http://zhangshiyu.com/post/170534.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 谢尽长安花+后续+结局沈照霜宁砚完本_谢尽长安花+后续+结局(沈照霜宁砚)
  • 不见青山存完结(霍青秦兮霍宴)_不见青山存完结霍青秦兮霍宴
  • 他的干妹妹怀孕后,我闪婚了文集(林诺陆深)全书免费_(林诺陆深)他的干妹妹怀孕后,我闪婚了文集后续(林诺陆深)
  • 江先生,你要听话列表列表_江先生,你要听话列表(许清欢江砚舟)
  • 一抹斜阳相思泪后续+必读夏知微陆远川完本_一抹斜阳相思泪后续+必读(夏知微陆远川)
  • 「不当假少爷后,我娶了首富当老婆」免费试读_萧寒沈凌薇章节多结局预体验‌
  • 全书浏览我死后,数万网友对我进行审判火爆(董天华尹瑶)_我死后,数万网友对我进行审判火爆(董天华尹瑶)全书结局
  • 纨绔恶少抽盲盒选妻子,我换嫁绝嗣总裁后他发疯求原谅+免费+后续列表_纨绔恶少抽盲盒选妻子,我换嫁绝嗣总裁后他发疯求原谅+免费+后续(阮玉绵)
  • 完结文晚云为落日溺亡++后续列表_完结文晚云为落日溺亡++后续(裴念舒)
  • [修仙:我在云疆养仙蚕]章节多结局预体验‌_「林珂」小说无删减版在线阅读
  • 全书浏览我死后,数万网友对我进行审判++番外(董天华尹瑶)_我死后,数万网友对我进行审判++番外(董天华尹瑶)全书结局
  • 被兄弟俩接连当工具人后,我杀疯了后续+(贺云舟)全书免费_(贺云舟)被兄弟俩接连当工具人后,我杀疯了后续+后续(贺云舟)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1