Vite + Vue3 + Ts 解决打包生成的index.html页面 显示空白、报资源跨域、找不到资源、404-Page Not Found等错误

问题描述:

在用Vue3 + Ts进行项目开发,通过Vite进行构建打包后,直接在本地以文件系统的方式,用浏览器直接打开打包生成后的dist目录下的index.html文件访问时,浏览器页面显示空白、打开控制台后有报错、该路径找不到对应的文件。

原因1:

由于index.html文件中,引用的相关资源文件的路径不正确导致在加载文件资源时失败,因为在大多数开发过程中,这个静态资源引用加载的前缀 默认是 “/”。
在这里插入图片描述

解决方法:

在项目根目录中打开vite.config.ts文件,如果没有应该文件就手动创建一个(其实就和Vue2.x中的vue.config.js类似),将静态资源基础路径 “base” 项设为:空字符:" “,或者是:”./",再或者是根据process.env.NODE_ENV变量进行环境条件判断设置,【也是以将加载文件的起始路径,设置为从当前(和 index.html 同级)路径即可】。

注:如果项目是在域名下的某个子目录中,那么base项的值就是:对应子目录的目录名!!

例如:项目是在https://www.xxx.com域名下的 h5 目录中,那在打开的URL地址就是:https://www.xxx.com/h5,那么 base: ‘/h5’,

注:同时子目录 还需要在vue项目的router.ts路由配置createRouter()的 history 配置项中,也要加上对应的 h5目名才能访问哦!!
如:const router = createRouter({
history: createWebHashHistory(import.meta.env.BASE_URL as string), // 子目录 ‘/h5’
routes
});

import { defineConfig } from 'vite'
import { resolve } from 'path'
import vue from '@vitejs/plugin-vue'export default defineConfig({plugins: [vue(),],// 静态资源基础路径 base: './' || '',// base: '/h5', // 子目录base: process.env.NODE_ENV === 'production' ? './' : '/',publicDir: 'public',cacheDir: 'node_modules/.vite',alias: {// 配置目录别名'@': resolve(__dirname, 'src'),'views': resolve(__dirname, 'src/views'),'utils': resolve(__dirname, 'src/utils'),},css: {// css预处理器preprocessorOptions: {less: {modifyVars: {// 全局less变量存储路径(配置less的全局变量)hack: `true; @import (reference) "${resolve('src/public/config.less')}";`,},javascriptEnabled: true,}}},// 开发服务器配置server: {host: true,open: true,port: 3000,proxy: {'/api': {target: '//www.xxxx.com',changeOrigin: true,ws: true,secure: true,rewrite: (path) => path.replace(/^\/api/, ''),}}},// 构建输出配置build: {outDir: './dist',target: 'modules',assetsDir: 'assets',assetsInlineLimit: 360000, }
})

原因2:

由于Vite 没有为传统模块系统设计, 默认输出 <script type=module>就是 ES Modules 以type="module"模块化的方式,来加载和访问文件(js模块,css文件等),
例如:

  <script type="module">// 在type="module"模式下,可以在Web开发时直接以ES6+的模块化的方式来导入js资源模块。// 引入本地js资源模块方式import { createApp } from './script/vue.js';// 引入网络js资源模块方式 【注:Node.js中的引入是不支持这种网络请求哦!!】import { createApp } from 'https://www.xxx.com/vue.js';const app = createApp({...});</script>

但是,以上这种type="module"模块化形式的JS代码,想要在浏览器中以文件服务的形式去访问运行不是被允许的!!
在这里插入图片描述

解决方法:

这个是硬伤,由于现在大部份浏览器还不支持直接在浏览器中,以type="module"方式,就是(<script type="module" crossorigin="" src="./assets/xxx..js"></script>)访问js文件(不支持以文件服务方式打开),这种模块化的方式需要在HTTP服务器环境下才能访问,所以,如果想要在本地浏览项目也要搭建一个HTTP服务环境即可。
搭建本地服务环境可以借助一些第三方工具快速秒建,常见的本地HTTP服务器工具如下:

- 软件类:

  • WampServer 下载地址:https://www.wampserver.com
  • XAMPP 下载地址:https://www.apachefriends.org/download.html
  • PhpStudy 下载地址:https://www.xp.cn/

- 浏览器扩展类:

  • WebServerforChrome 下载地址:https://www.gugeapps.net/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb

- 命令行工具类(推荐):

  • live-server // 下载地址:https://www.npmjs.com/package/live-server
  • http-server // 下载地址:https://www.npmjs.com/package/http-server

如果你以上工具一个都没有安装的话,这里推荐 live-serverhttp-server,因为它们在安装 和 使用上都非常的方便,只需要在命令行工具中,执行命令就搞定了。

/**
* 以下服务工具二选一即可!!
*/// 全局安装live-server
npm install -g live-server// 全局安装http-server
npm install -g http-server// 启动HTTP服务:1、在打包生成后的dist目录下,打开命令行工具2、执行如下命令:live-server // 启动HTTP服务或http-server // 启动HTTP服务

命令行工具类安装成功后,在对应的打包生成后的目录下(一般是dist目录,或build目录 或自定义的项目录构建输出目录),打开命令行工具(Dos窗口)在里面输入 live-server 命令后,就会自动打开浏览器看到效果啦!具体如下图所示:
在这里插入图片描述

扩展:

问题描述:

当你兴高采烈的把以上问题解决好以后,开始上线生产环境时,上线完成后,可能又会遇到以下问题:

  1. 页面可以正常访问浏览,一但点击跳转到别的页面路由 或者是 刷新页面时,报404 - Page Not Found问题!!

  2. 页面只能在域名下可以正常打开,如果在域名后面(如 https://www.xxx.com/index.html)加上/index.html,又找不到页面、无法显示了!!

解决方法:

1、改变路由模式

将vue-router中的路由模式从createWebHistory() 改为 createWebHashHistory()即可。

import { createRouter, createWebHistory, createWebHashHistory, RouteRecordRaw } from 'vue-router'
import Home from '../views/Home.vue'const routes: Array<RouteRecordRaw> = [{path: '/',name: 'Home',component: Home,},{path: '/about',name: 'About',// route level code-splitting// this generates a separate chunk (about.[hash].js) for this route// which is lazy-loaded when the route is visited.component: () => import(/* webpackChunkName: "about" */ '../views/About.vue'),},
];const router = createRouter({// history: createWebHistory(import.meta.env.VITE_BASE_PATH as string),history: createWebHashHistory(import.meta.env.VITE_BASE_PATH as string), // 改为这种HASH路由模式routes,
});export default router;

2、修改服务器配置

修改对应生产服务器的配置文件:
1、Nginx服务器配置


# 在Nginx服务器的conf/nginx.conf配置文件中添加如下代码即可location / {try_files $uri $uri/ /index.html;
}# 注:修改后nginx.conf配置文件后,一定要重启nginx服务,配置才能生效!

2、Apache 服务器配置


<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRule ^index\.html$ - [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /index.html [L]
</IfModule>

3、IIS 服务器配置


<?xml version="1.0" encoding="UTF-8"?>
<configuration><system.webServer><rewrite><rules><rule name="AngularJS" stopProcessing="true"><match url=".*" /><conditions logicalGrouping="MatchAll"><add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /><add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /></conditions>//将url中的参数设为 "/" 或者 "/index.html" <action type="Rewrite" url="/" /></rule></rules></rewrite></system.webServer>
</configuration>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/50396.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

post提交数据返回404错误

使用post提交数据&#xff0c;发现无法执行success函数&#xff0c;后台的代码也正常执行了&#xff0c;但是就是无法执行success函数&#xff0c;执行error函数&#xff0c; 我在MainConfig中做了一个映射 js代码&#xff1a; 实在是看不出哪里错了 &#xff0c;求大神指点

Apipost测后台接口出现404错误的几种解决方式

1.url写错了&#xff1a;检查一下单词拼写和路径名&#xff0c;仔细检查有没有多写一个‘ / ’ 2.检查一下参数的类型有没有和代码中一致 3.检查一下Controller层的方法前有没有加ResponseBody注解&#xff0c;没有的要加上或者将Controller改为RestController也行&#xff08;…

后台程序正常,页面获取不到数据报404的原因-@ResponseBody

ResponseBody Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文&#xff08;ResponseBody&#xff09;中&#xff0c;一般在异步获取数据时使用&#xff0c;通常是在使用 RequestMapping 后&#xff0c;返回值通常解析为跳转路径&#xff0c;加上 Responsebody…

关于访问后端接口报404的问题——全网最详细的404错误详解

当我们通过前端向后端发起一个请求调用后端接口时&#xff0c;经常会遇到404的问题。网上关于对404问题介绍的一大堆&#xff0c;其实404问题的本质就两点。 在介绍404问题之前先温习一个小的知识点——项目访问路径 项目访问路径&#xff1a;就是定位一个项目的路径&#xff0…

Comate代码助手推出,现场生成了贪吃蛇游戏,我们距离AI自动编程还有多远?

Comate代码助手推出&#xff0c;现场生成了贪吃蛇游戏&#xff0c;我们距离AI自动编程还有多远&#xff1f; 百度智能云推出“Comate”代码助手&#xff0c;并正式开放邀测&#xff0c;不算很意外。 毕竟让AI写代码&#xff0c;跑一跑贪吃蛇&#xff0c;算是传统艺能。 不过你…

ChatGPT帮我用WPF制作一个简易贪吃蛇小游戏

User&#xff1a; 帮我生成一个WPF的应用程序&#xff0c;做一个贪吃蛇的小游戏&#xff0c;要完整的示例。 ChatGTP: 当然&#xff01;以下是一个完整的WPF应用程序示例&#xff0c;用于实现贪吃蛇小游戏&#xff1a; MainWindow.xaml&#xff1a; <Window x:Class"…

《HelloGitHub》第 82 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 …

如何让发送者不知道你收听了WhatsApp语音消息

如果您正在寻找一种在发件人不知情的情况下收听 WhatsApp 音频消息的方法&#xff0c;您可以找到以下 3 种不同的方法来收听 WhatsApp 音频&#xff0c;而不会生成蓝勾。 在发件人不知情的情况下收听 WhatsApp 音频 每当您打开 WhatsApp 文本或语音消息时&#xff0c;WhatsApp…

怎么将文字转语音真人发声?不会的小伙伴来看这个方法

怎么把文字转换成语音真人发声呢&#xff1f;大家在看视频的时候&#xff0c;发现很多的解说视频的声音都很相近&#xff0c;自己在做视频的时候也想使用这个声音&#xff0c;但是不知道他们是如何做到的&#xff0c;今天教大家一个方法&#xff0c;可以把文字转成真人发音的语…

马斯克呼吁重返办公室,直言:“做不到,就视为离职”

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 近年来全球兴起的居家办公热潮&#xff0c;苹果、微软、Meta 等科技巨头加入其间。 然而&#xff0c;作为特斯拉、推特 CEO 的马斯克似乎在这件事上有着不用的想法。 据 theverge 报道&…

搜狗输入法电脑端如何分词

使用引号&#xff08;‘&#xff09;即可&#xff0c;如图 如果使用双拼&#xff0c;分词就更有必要&#xff0c;在输入长句子的时候&#xff0c;一手按住引号&#xff0c;一手输入简拼&#xff0c;可以弥补双拼的长句短板&#xff0c;如图

电脑必备:通用输入法状态提示,再也不怕按错,再也不用看右下角

ImTip 是一个开源输入法状态提示工具&#xff08; 仅 639 KB &#xff09;&#xff0c;虽然发布没多久&#xff0c;已被网友推荐为 Windows 必备软件。在小众有网友留言&#xff1a;“终于遇到她了&#xff0c;你说的这个痛苦&#xff0c;我承受好久了……”。 ImTip 通过在输…

将电脑输入法关闭只留我们经常用的输入法

很多人不习惯用微软默认的输入法&#xff0c;有它在语言栏占着位置&#xff0c;就算换了首选输入法&#xff0c;想要切换别的输入法时&#xff0c;每次还是要多按一次切换组合键&#xff0c;碎小的时间累积起来&#xff0c;会浪费我们不少工夫&#xff0c;本篇经验便告诉大家如…

【软件架构思想系列】从伟人《矛盾论》中悟到的软件架构思想真谛:“对象”即事物,“函数”即运动变化...

引子 形而上学和辩证法两种宇宙观是截然相反的。“所谓形而上学的或庸俗进化论的宇宙观,就是用孤立的、静止的和片面的观点去看世界。这种宇宙观把世界一切事物,一切事物的形态和种类,都看成是永远彼此孤立和永远不变化的”,“和形而上学的宇宙观相反,唯物辩证法的宇宙观主…

为什么说3D引擎是下一代互联网的“CAD”?

01 3D引擎是什么&#xff1f; 听到“引擎”两个字&#xff0c;你可能首先会想到汽车引擎&#xff0c;为汽车提供动力的核心部件。如果没有引擎&#xff0c;汽车就只能是一个模型&#xff0c;它就无法跑起来。 3D模型也一样&#xff0c;我们用3DMax软件制作了一个非常逼真、精美…

提示工程在AI绘画领域的应用前景

AI绘画是现在非常火热的 AI领域。在很多人眼里, AI的绘画原理是类似于人类的写生&#xff0c;不过这里所说的“AI”不是普通的 AI,而是“AI CAD”。在传统的 CAD软件中, CAD是用来绘画的&#xff0c;在 CAD软件中&#xff0c;模型首先被输入到电脑中&#xff0c;在电脑中通过投…

【回答问题】ChatGPT上线了!给我推荐20个比较流行的深度学习模型

目录 给我推荐20个比较流行的nlp模型给我推荐20个比较流行的计算机视觉模型给我推荐20个比较流行的图像分类模型给我推荐20个比较流行的人脸识别模型给我推荐20个比较流行的实体识别模型给我推荐20个比较流行的语言识别模型给我推荐20个比较流行的激光雷达3D点云模型给我推荐20…

人工智能 AI | ChatGPT 时代,程序员的生存之道

ChatGPT 近期炙手可热&#xff0c;仿佛没有什么问题是它不能解决的。出于对 ChatGPT 的好奇&#xff0c;我们决定探索下它对于前端开发人员来讲&#xff0c;是作为辅助工具多一些&#xff0c;还是主力工具更多一些&#xff1f; 2D 能力测试 我们就挑选一个著名的递归回溯问题—…

达芬奇

达芬奇 注意事项 归纳素材 理好时间线 分好轨道 part1 1&#xff1a;媒体面板&#xff08;导入素材&#xff0c;进行分类&#xff09; 媒体浏览器&#xff08;右上&#xff09; 找文件 素材监视器&#xff08;中上&#xff09; 回看 素材数据&#xff08;左&#xff09; 查…

e3 1231 v3 达芬奇_Premiere和达芬奇调色,都是最新版

Pr更新到最新版 在达芬奇调色软件DaVinci Resolve Studio 更新到16版本后,Adobe 终于不再挤牙膏,频繁更新。从2020下半年开始,推出了支持硬件加速(Nvdia和AMD显卡)的更新版本,在视频编辑和渲染输出下速提速明显,尤其是使用硬件加速渲染输出,速度飞快,将近5倍的提升,高倍…