flask+Vue(Vite)部署,js文件不能被正确解析解决方案

构建后,浏览器不执行js文件,触发错误Strict MIME type checking is enforced for module scripts per HTML spec.Expected a JavaScript module script but the server responded with a MIME type of "text/plain".​

问题原因

构建后,因为生产环境index.html​文件中<script>​标签使用了type="module"​,而服务器对于js文件的类型返回的是text/plain​,类型不一致,其详细解释可见.mjs 与 .js

解决方案一

手动修改index.562b9b5a.js​文件后缀为.mjs​,并将其对应的文件引用中文件名做相应更改(可能不止限于index.html​文件中)

缺点:麻烦,容易引起其他错误

解决方案二

配置Vite构建时不使用import​,如设置build.target​为edge15​,详细信息见Vite文档

缺点:强行降低版本可能导致构建失败解决方案三(推荐)

对js文件更改响应头,在flask中插入代码

复制代码
#更改js文件的返回头
@app.after_request
def changeHeader(response):
    disposition = response.get_wsgi_headers('environ').get(
        'Content-Disposition')  or ''#获取返回头文件名描述,如'inline; filename=index.562b9b5a.js'
    if disposition.rfind('.js') == len(disposition) - 3:
        response.mimetype = 'application/javascript'
    return response
相关推荐
一颗不甘坠落的流星几秒前
【@ebay/nice-modal-react】管理React弹窗(Modal)状态
前端·javascript·react.js
辛-夷3 分钟前
vue高频面试题
前端·vue.js
AwakeFantasy17 分钟前
关于fluid打字机问题的解决记录
javascript·博客·hexo·fluid
坐吃山猪17 分钟前
Electron03-桌面文件夹
开发语言·javascript·ecmascript
我命由我1234518 分钟前
微信小程序 - 内容弹出框实现(Vant Weapp 实现、原生实现)
开发语言·前端·javascript·微信小程序·小程序·前端框架·js
hadage23323 分钟前
--- vue标签中有key和没有的区别 ---
vue.js
拾晚霞29 分钟前
【Vue2-Niubility-Uploader】一个强大的 Vue2 文件上传解决方案
vue.js
前端老宋Running37 分钟前
别再给组件“打洞”了:这才是 React 组件复用的正确打开方式
前端·javascript·前端框架
chilavert31840 分钟前
技术演进中的开发沉思-224 Ajax面向对象与框架
javascript·okhttp
盗德1 小时前
最全音频处理WaveSurferjs配置文档二(事件)
前端·javascript