我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vite打包静态文件打开显示空白的解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vite打包静态文件打开显示空白的解决

需求场景

  • 本地调试访问打包的文件看是否有啥问题,方便定位线上问题
  • 安卓手机需要去直接访问静态文件,而不是访问域名的情况

vite 打包生成的文件如果直接放在服务器中是可以正常访问的,但是本地直接访问打包生成index.html文件就会提示以下问题。

  • 访问的文件不存在,主要是因为路径配置问题。
  • 提示跨域问题,不支持files协议,主要是因为esModule问题。

问题1:访问的文件不存在,主要是因为路径配置问题。

解决:在 vite.config.js文件中配置

export default defineConfig({
	...
   base: "./", 
    ...
  })

验证路径是否正常看浏览器中的network看文件是否加载正常

问题2. 提示跨域问题,不支持files协议,主要是因为esModule问题

对比webpack 打包静态文件是否可以正常访问

答案:正常
在vue.config.js 文件中配置

module.exports = {
  outputDir: 'dist',
  publicPath: baseUrl,

原理:开始通过file协议直接访问index.html,在index.html中静态引入index.js,在index.js中import test.js。在import的过程中需要http服务器去解析es6语法并添加header头信息去跨域引入test.js,但是file协议相当于通过资源管理器静态访问index.html,中间的过程没有http服务器参与解析,所以无法识别es6的import语法。

解决:将打包生成的文件改成为没有moudle的文件

step1:安装

$ npm install @vitejs/plugin-legacy

step2: 配置vite.config.js

import legacy from '@vitejs/plugin-legacy';
export default defineConfig({
....
  plugins: [legacy({
    targets: ['defaults', 'not IE 11']
  }),vue()],
   build:{
    target: ['es2015', 'chrome63'], // 默认是modules,百度说是更改这个会去输出兼容浏览器,尝试没啥作用,先配置吧
  }
 ....
})

step3:

在dist并列的文件夹中创建脚本文件 (用于替换module等关键词,省的每次得手动删除)toFile.cjs
创建 toFiles.cjs (为啥格式不是js为了执行命令不报兼容的错误)

import fs from 'fs';

console.time('转换耗时');
const distPath = './dist/index.html';//打包路径的index.html
let htmlText = fs.readFileSync(distPath, 'utf8');
let resultText = '';
let htmlArr = htmlText.match(/.*\n/g) || [];
htmlArr.forEach(str => {
    str = str.replace(/\s?nomodule\s?/g,' ');
    str = str.replace(/\s?crossorigin\s?/g,' ');
    str = str.replace(/data-class="lazy" data-src/g,'class="lazy" data-src');
    if(!/type="module"/i.test(str)) resultText += str;
});
fs.writeFileSync(distPath,resultText,'utf8');
console.timeEnd('转换耗时');

step4:

npm install fs // 安装fs
node toFile.cjs  // 执行脚本

step5: 查看 dist 文件夹中的 index.html 文件,查看是否没有module 、 crossorigin 等关键词,访问index.html 文件 查看效果

在这里插入图片描述

一般执行到这里基本是可以正常访问的,但是我的项目还是空白,后面观察加载的html结构发现router-view的组件没有加载上去,后面尝试将router.js 文件中history模式改成了hash,然后再重新打包执行上面的操作能够正常打开。

总结:

vite生成的文件会带有module,导致存在跨域问题,大多数项目开发都是将文件放在服务器中通过域名去访问,但是特殊情况需要直接访问静态资源。所以要去解决file存在跨域的问题。

反思:

  • webpack为啥打包出的文件同样是file直接访问但是不存在跨域。
  • webpack为啥打包出的文件不带module,但是file打包会带module。

借鉴其他的博文总结:

1、给引用文件设置type="module"等于给文件设置了私有作用域,xx.js文件成了单独的模块,运行在自己的私有作用域中,而不是全局作用域中。

2、虽然script标签自带跨域能力(这也是某些场合会通过jsonp结合script来请求资源的原因),但是这里的跨域是指的http协议(协议、域名、端口一致),file协议是不支持跨域的。

3、es6声明type=“module”,这类使用了模块的script是受限于同源策略的。

参考:

vue3.0 + vue-router4.0打包后页面空白

到此这篇关于vite打包静态文件打开显示空白的解决的文章就介绍到这了,更多相关vite打包静态文件空白内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vite打包静态文件打开显示空白的解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vite打包静态文件打开显示空白的解决

本文主要介绍了vite打包静态文件打开显示空白的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-01

win10打开文件桌面不显示如何解决

如果在Windows 10上打开文件后,桌面上不显示文件,请尝试以下解决方法:1. 重新启动电脑:有时候重新启动可以解决一些临时的问题。2. 检查桌面图标设置:确保桌面图标设置正确。右键点击桌面,选择“查看”选项,然后确保“自动排列图标”和
2023-09-04

vue3项目打包发布到服务器后访问页面显示空白怎么解决

这篇“vue3项目打包发布到服务器后访问页面显示空白怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue3项目打包发
2023-07-05

vue3+vite assets动态引入图片及解决打包后图片路径错误不显示的方法

这篇“vue3+vite assets动态引入图片及解决打包后图片路径错误不显示的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看
2023-07-05

解决vue3项目打包发布到服务器后访问页面显示空白问题

这篇文章主要介绍了解决vue3项目打包发布到服务器后访问页面显示空白问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-19

win10打开图片显示文件系统错误如何解决

win10打开图片显示文件系统错误如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体方法如下:1、回到桌面,鼠标右键单击开始窗口按钮。2、开始右键菜单选择运行。3、
2023-06-13

如何解决win7系统中打开或关闭windows功能显示一片空白问题

这篇文章主要为大家展示了“如何解决win7系统中打开或关闭windows功能显示一片空白问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决win7系统中打开或关闭windows功能显示一
2023-06-27

Grunt针对静态文件的压缩,版本控制打包的实例讲解

在讲之前先谈谈大致步骤:安装nodejs -> 全局安装grunt -> 项目创建package.json --> 项目安装grunt以及grunt插件 -> 配置Gruntfile.js -> 运行任务 1.安装Node 我们开始之前需要
2022-06-04

ecshop伪静态后产品列表页切换显示方式无法打开页面的解决问题

theme/default/library/goods_list.lbi 在你的FTP里找到这个库文件,这里以default默认模板为例子编程客栈,其他的请编程客栈到各自模板文件夹下找,然后找到下面这段代码
2022-06-12

Win8.1系统打开VHD文件提示“你要如何打开此类型的文件”的解决方法

什么是VHD文件?VHD文件全名叫做Virtual Hard Disk,即虚拟磁盘,是微软推出的一种磁盘的格式,在hyper-V中安装操作系统时,就可以把操作系统安装在VHD文件中,VHD对于普通的消费者或者是专业的IT技术人员都可以说是非
2022-06-04

win7 打开文件提示需要管理员权限才能打开的解决方法

在WIN7操作平台打开某些文件,如果需要管理员权限才能打开。通过下面的操作就可以获取管理员权限 创建批处理register文件。文件内容为,文件后缀名为.reg。然后双击该文件。打开需要访问的文件,如果需要管理员权限,则选中该文件,单击鼠标
2023-05-31

Android项目在 app 中通过 WebView 访问 url显示空白,使用浏览器可以打开,Android WebView加载出现空白页面问题解决

这是服务器证书校验WebView的安全问题 服务器证书校验主要针对 WebView 的安全问题。在 app 中需要通过 WebView 访问 url,因为服务器采用的自签名证书,而不是 ca 认证,使用 WebView 加载 url 的时候
Android项目在 app 中通过 WebView 访问 url显示空白,使用浏览器可以打开,Android WebView加载出现空白页面问题解决
2023-12-23

Win10总是弹出“打开文件-安全警告”提示框的解决方法

很多用户在Win10系统下安装程序时,都会遇到一个“打开文件-安全警告 你要打开此文件吗&rdxVjsReYqPqquo;的提示www.cppcns.com框。虽然从字面上看,Windojsws10是为了我们系统安全着想,但是我
2023-05-20

vue3+viteassets动态引入图片的三种方法及解决打包后图片路径错误不显示的问题

这篇文章主要介绍了vue3+viteassets动态引入图片的几种方式,解决打包后图片路径错误不显示的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-20

编程热搜

目录