为什么引用js或css后加?v=

本文介绍了如何通过在CSS和JS文件URL后添加参数(如version或v)来强制浏览器刷新缓存。当CSS或JS文件更新时,更改参数值可以确保客户端获取最新版本,避免因缓存导致的样式或脚本未更新问题。这种做法在前端开发中常见,用于解决浏览器对静态资源的缓存策略问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是为了避免css缓存, 如果你每次都引用aa.css, 那么在客户端那里访问的时候,即使你的aa.css已经修改了,但是浏览器默认还是会使用本地缓存的aa.css,如果你修改css之后,引用aa.css?v=XX,每次修改css都改变XX的数值,那么,在客户端那里,浏览器如果检测到XX与本地缓存的css不一致,就会重新去服务器请求最新的css,这样你的css才能在客户端体现。

<span style="font-size:14px;">css和js带参数(形如.css?v=与.js?v= 或 .css?version=与.js?version= )  
  
<script type=”text/javascript” src=”jb51.js?version=1.2.6″></script>  
<link rel=’stylesheet’ href=’base.css?version=2.3.3′ type=’text/css’ />  
  
  
使用参数有两种可能:  
  
  
第一、脚本并不存在,而是服务端动态生成的,因此带了个版本号,以示区别。  即上面代码对于文件来说 等价于  
<script type=”text/javascript” src=”jb51.js”></script>  
<link rel=’stylesheet’ href=’base.css’ type=’text/css’ />  
  
  
但浏览器会认为他是 该文件的某个版本!  
  
  
第二、客户端会缓存这些css或js文件,因此每次升级了js或css文件后,改变版本号,客户端浏览器就会重新下载新的js或css文件 ,刷性缓存的作用。大家可能有时候发现修改了样式或者js,刷新的时候不变,就是客户端缓存了css或者js文件,因此加上参数还是有好处的!  
第二种情况最多,也可能两种同时存在。 </span>  

 

vue+vite使用qiankun载外网子项目出现GET http://192.168.237.201:3000/subapp/assets/index-CrCi28NU.js net::ERR_ABORTED 404 (Not Found) eval @ VM3607:1 eval @ VM3607:12 evalCode @ qiankun.js?v=0cc3c8e5:4727 geval2 @ qiankun.js?v=0cc3c8e5:5117 exec @ qiankun.js?v=0cc3c8e5:5142 schedule @ qiankun.js?v=0cc3c8e5:5166 (匿名) @ qiankun.js?v=0cc3c8e5:5175 (匿名) @ qiankun.js?v=0cc3c8e5:5174 Promise.then _execScripts @ qiankun.js?v=0cc3c8e5:5109 execScripts @ qiankun.js?v=0cc3c8e5:5225 _callee17$ @ qiankun.js?v=0cc3c8e5:7680 tryCatch @ qiankun.js?v=0cc3c8e5:68 (匿名) @ qiankun.js?v=0cc3c8e5:160 (匿名) @ qiankun.js?v=0cc3c8e5:95 asyncGeneratorStep @ qiankun.js?v=0cc3c8e5:3495 _next @ qiankun.js?v=0cc3c8e5:3513 Promise.then asyncGeneratorStep @ qiankun.js?v=0cc3c8e5:3504 _next @ qiankun.js?v=0cc3c8e5:3513 Promise.then asyncGeneratorStep @ qiankun.js?v=0cc3c8e5:3504 _next @ qiankun.js?v=0cc3c8e5:3513 Promise.then asyncGeneratorStep @ qiankun.js?v=0cc3c8e5:3504 _next @ qiankun.js?v=0cc3c8e5:3513 Promise.then asyncGeneratorStep @ qiankun.js?v=0cc3c8e5:3504 _next @ qiankun.js?v=0cc3c8e5:3513 Promise.then asyncGeneratorStep @ qiankun.js?v=0cc3c8e5:3504 _next @ qiankun.js?v=0cc3c8e5:3513 (匿名) @ qiankun.js?v=0cc3c8e5:3518 (匿名) @ qiankun.js?v=0cc3c8e5:3510 _loadApp @ qiankun.js?v=0cc3c8e5:7981 loadApp @ qiankun.js?v=0cc3c8e5:7591 _callee3$ @ qiankun.js?v=0cc3c8e5:8181 tryCatch @ qiankun.js?v=0cc3c8e5:68 (匿名) @ qiankun.js?v=0cc3c8e5:160 (匿名) @ qiankun.js?v=0cc3c8e5:95 asyncGeneratorStep @ qiankun.js?v=0cc3c8e5:3495 _next @ qiankun.js?v=0cc3c8e5:3513 Promise.then asyncGeneratorStep @ qiankun.js?v=0cc3c8e5:3504 _next @ qiankun.js?v=0cc3c8e5:3513 (匿名) @ qiankun.js?v=0cc3c8e5:3518 (匿名) @ qiankun.js?v=0cc3c8e5:3510 app2 @ qiankun.js?v=0cc3c8e5:8222 (匿名) @ qiankun.js?v=0cc3c8e5:4087 Promise.then (匿名) @ qiankun.js?v=0cc3c8e5:4086 Promise.then X @ qiankun.js?v=0cc3c8e5:4085 (匿名) @ qiankun.js?v=0cc3c8e5:4418 Promise.then d2 @ qiankun.js?v=0cc3c8e5:4417 Rt @ qiankun.js?v=0cc3c8e5:4412 bt @ qiankun.js?v=0cc3c8e5:4317 (匿名) @ qiankun.js?v=0cc3c8e5:8167 registerMicroApps @ qiankun.js?v=0cc3c8e5:8165 (匿名) @ micro.ts:10了解此错误AI micro.ts:28 为何http://192.168.237.201:3000/subapp/assets/index-CrCi28NU.js是本地调用,而不是从子应用调用?
最新发布
03-15
<think>嗯,用户在使用Vue+Vite和qiankun载外网子项目遇到了404错误,具体是找不到子应用的JS文件。首先,我需要理清楚这个问题的可能原因。根据错误信息,浏览器试图从主应用的本地地址载子应用的资源,而不是从子应用的服务器获取。这显然有问题,因为子应用应该部署在自己的服务器上,主应用应该去那里载资源。 首先,我应该检查子应用的配置。在qiankun中,主应用需要正确设置子应用的入口地址。如果入口地址配置错误,比如使用了相对路径者子应用的publicPath设置不正确,就可能导致资源路径错误。特别是在Vite项目中,默认的base路径可能需要调整,否则生成的资源路径可能不正确。 接下来,子应用的打包配置也很重要。Vite项目默认可能不会将资源路径处理为绝对路径者没有正确设置base选项,导致构建后的资源路径是相对路径。当主应用载子应用,这些相对路径会被解析为主应用的域名下,从而引发404错误。因此,需要确保子应用的vite.config.js中设置了正确的base,并且资源路径是绝对路径。 另外,跨域问题也可能导致资源载失败。虽然错误是404,但有候跨域限制也可能让浏览器无法正确获取资源,不过这里更可能是路径问题。不过,检查子应用服务器的CORS配置还是有必要的,确保允许主应用的域名访问。 还有,qiankun的动态载机制可能对资源路径有特殊要求。子应用可能需要配置webpackVite的publicPath,以确保资源路径正确。对于Vite项目,可能需要使用@vitejs/plugin-legacy者其他插件来处理模块联邦路径问题。 此外,子应用的部署位置是否正确?如果子应用部署在外网,主应用配置的entry应该指向外网的URL,而不是本地路径。比如,子应用应该有一个类似http://external-subapp.com/assets/index.js的入口,而不是本地的3000端口。 最后,查看网络请求的具体情况,确认浏览器实际请求的URL是否符合预期。如果子应用的入口HTML正确载,但其中的JS/CSS资源路径错误,可能需要调整构建配置qiankun的配置,比如使用__webpack_public_path__动态设置路径者在qiankun的生命周期钩子中修正资源路径。 总结下来,可能的解决步骤包括:检查子应用的入口配置是否正确,设置Vite的base选项,确保资源路径为绝对路径,处理跨域问题,以及验证子应用的部署和主应用的配置是否一致。</think>这个错误是由于主应用尝试从本地服务器载子应用资源导致的。以下是逐步分析和解决方案: **一、问题根源分析** 1. 路径解析错误:子应用资源路径被错误地指向主应用本地服务器`http://192.168.237.201:3000` 2. Qiankun资源载策略:默认会从当前域载子应用资源,而非子应用真实部署地址 3. Vite构建特性:Vite默认使用绝对路径载资源(如`/assets/xxx.js`) **二、关键配置检查点** ```javascript // 主应用配置示例(micro.ts) registerMicroApps([ { name: 'subapp', entry: '//外网子应用域名/subapp/', // 必须确保这里是正确的外网地址 container: '#container', activeRule: '/subapp' } ]) ``` **三、解决方案** **步骤1:配置子应用publicPath** 在子应用vite.config.js中: ```javascript // vite.config.js export default defineConfig({ base: '/subapp/', // 必须与外网部署路径一致 build: { assetsDir: 'assets' } }) ``` **步骤2:主应用修正资源路径** 在主应用qiankun配置中增: ```javascript start({ sandbox: { experimentalStyleIsolation: true }, // 关键配置:修正资源路径 getTemplate(tpl) { return tpl.replace(/href="\//g, 'href="//外网子应用域名/') .replace(/src="\//g, 'src="//外网子应用域名/') } }) ``` **步骤3:子应用部署验证** 确保外网可访问到以下结构: ``` https://外网域名 ├─/subapp/ │ ├─index.html │ └─assets/ │ └─index-xxxxxx.js ``` **四、常见问题排查** 1. **跨域问题**:确保子应用服务器配置CORS: ```http Access-Control-Allow-Origin: * ``` 2. **缓存问题**:清理浏览器缓存后测试 3. **路径大小写**:Linux服务器需注意路径大小写敏感 4. **版本兼容性**:检查qiankun与vite版本是否兼容 **五、调试技巧** 在浏览器控制台执行: ```javascript // 检查子应用入口文件是否正确载 fetch('https://外网子应用域名/subapp/').then(res => res.text()) ``` 通过以上配置,资源路径将修正为: $$https://外网子应用域名/subapp/assets/index-xxxxxx.js$$ 而不是错误的本地路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值