更新时间:2020-06-02 14:52:43css
测试偶尔会出现这个问题,遂提出一个bug
,从bug
字面意思来看,有一个js
的块加载失败了。丢失了一个${domain}/js/chunk-${hash}.js
。html
为何会丢失?前端
为何会偶发?vue
同类问题git
Vue项目中出现Loading chunk {n} failed问题的解决方法github
本文大量引用了17khba在点击切换路由的时候,有时候会报错的回答。vue-cli
前提:部署方式为删除上一次构建的资源文件,替换成新的打包文件。docker
bgt78d
的资源不见了,但此时用户的
index.html
模板中仍是记录的
bgt78d
的资源地址
index.html
,因此老的
index.html
中的 chunk 信息生效
上面也提到了刷新页面,可是仅仅捕获到错误就刷新,极可能出现死循环,由于浏览器或者相似于Nginx
缓存设置的缘由,浏览器不必定每次刷新去获取新的index.html
。 因此结合重试次数和重试间隔来重试会比较好npm
/static/js/balabal.[hash].js
,如今
/[version]/static/balabal.[hash].js
PS.若是不想暴露 version,能够把 version 作一个 hash 或者混淆
查看Vue-cli配置文档,
assetsDir
Type:
string
Default:
''
放置生成的静态资源 (js、css、img、fonts) 的 (相对于
outputDir
的) 目录。提示
从生成的资源覆写 filename 或 chunkFilename 时,
assetsDir
会被忽略。
只须要给assetsDir
设置一个版本号文件夹,每次发布新版的时候,不删除这个文件夹就行。能够选择性的保留最近几回版本的静态资源文件。
使用 npm 版本号管理进行配合。
${app}/vue.config.js
const { version } = require('./package.json')
module.exports = { // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。 assetsDir: `./${version}`, ... } 复制代码
打包命令加上--no-clean
。做用是不清除上次打包生成的dist
目录。
vue-cli-service build --no-clean
复制代码
问题到这里基本已经解决了,不过仍然出现了一些能够优化的地方。好比我没有清除上次打包的dist
目录,若是在${app}/public
目录下引入的一些静态资源后期版本已经删除了,因为咱们没有删除dist
目录,不须要的资源仍然存在部署的服务器上。、
若是有很好的方案欢迎指出或者讨论。谢谢你的阅读~💗
SunSeekerX,前端开发、Nodejs开发、小程序、uni-app
开发、等等
喜欢探讨技术实现方案和细节,完美主义者,见不得bug
。
Github:github.com/SunSeekerX
我的博客:yoouu.cn/
我的在线笔记:sunseekerx.yoouu.cn/