”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用镜像部署 Vite/React 应用程序:完整指南

使用镜像部署 Vite/React 应用程序:完整指南

发布于2024-11-07
浏览:122

Deploying a Vite/React Application with Images: A Complete Guide

在 GitHub Pages 上部署 Vite/React 应用程序是一个令人兴奋的里程碑,但这个过程有时会带来意想不到的挑战,特别是在处理图像和资产时。这篇博文将引导您完成整个过程,从最初的部署到解决常见问题并找到有效的解决方案。

无论您是初学者还是有经验的人,本指南都将帮助您避免常见的陷阱,并成功部署您的 Vite/React 应用程序,并正确渲染所有资源。


先决条件

在我们深入之前,请确保您具备以下条件:

  • Vite/React 项目:本指南假设您已使用 Vite 作为构建工具并使用 React 作为框架来设置项目。
  • GitHub 存储库:您应该有一个现有的 GitHub 存储库,您可以在其中推送应用程序进行部署。
  • 已启用 GitHub Pages:确保在用于部署的存储库设置中启用 GitHub Pages。

第 1 步:初始化项目和 GitHub Pages 部署

首先,确保您的 Vite/React 应用程序已正确初始化并在本地主机上运行。您可以按照如下方式创建一个基础的Vite项目:


npm create vite@latest


安装依赖项:


npm install


在本地运行项目以确认一切正常:


npm run dev


项目准备就绪后,将其推送到 GitHub 存储库。

为 GitHub Pages 创建 vite.config.js

GitHub Pages 期望从特定的基本 URL 提供应用程序,该 URL 通常是您的存储库名称。更新 vite.config.js 文件以反映这一点:


import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  base: process.env.NODE_ENV === 'production' ? '/your-repo-name/' : '/',
  plugins: [react()],
})


base 选项确保应用程序在部署时使用正确的基本路径。


第 2 步:构建和部署项目

您需要安装 gh-pages 包来处理部署。


npm install gh-pages --save-dev


在 package.json 中,添加以下脚本以自动执行部署过程:


"scripts": {
  "predeploy": "npm run build",
  "deploy": "gh-pages -d dist"
}


运行部署:


npm run deploy


此时,您的项目应该位于 https://.github.io//,但如果您像我一样,您可能会遇到一些问题应用程序无法正确渲染,或图像未显示。


第三步:常见问题及解决方案

问题一:部署后出现空白页

部署后,您可能会注意到应用程序加载了一个空白页面。这通常是由路由问题引起的。默认情况下,使用react-router-dom中的BrowserRouter,它依赖于服务器端路由,但GitHub Pages提供静态文件,不处理客户端路由。

解决方案:使用HashRouter

要解决此问题,请在 index.js 或 main.jsx 文件中从 BrowserRouter 切换到 HashRouter。

注意:您没有必要拥有它,它只是一个我在项目中经常使用的方便的 UI 库。


import { HashRouter } from 'react-router-dom';

createRoot(document.getElementById('root')).render(
  
);


HashRouter 在 URL 中使用井号 (#) 来跟踪导航状态,允许 GitHub Pages 正确服务不同的路由,而不会返回 404。


问题2:刷新或其他路由出现404错误

修复空白页问题后,您可能面临的另一个问题是应用程序在主页上运行,但在导航到其他路线时显示 404 错误,特别是当您直接访问 /blogs 或 /projects 等路线时。

发生这种情况是因为 GitHub Pages 只知道如何提供 index.html 文件,而无法识别由 React Router 管理的路由。

解决方案:在 GitHub Pages 设置中处理 404 错误

要解决此问题,您需要在 public/ 文件夹中创建一个 404.html 文件。该文件将确保 GitHub Pages 为您的 index.html 文件提供它无法识别的任何路由,从而允许 React Router 处理路由:

  1. 将您的index.html复制到名为404.html的新文件中。
  2. 将此文件放入您的 public/ 文件夹中。
  3. 重建并重新部署项目。

问题 3:生产环境中图像未加载

最常见的部署问题之一是图像加载不正确。虽然它们在本地主机上运行良好,但在部署到 GitHub Pages 后您可能会注意到图像链接损坏。

例如,您可以在组件中引用如下图像:


thumbnail

问题:图像路径不正确

这里的问题是,当应用程序部署在子目录(例如 /your-repo-name/)中时,绝对路径(以 / 开头)无法正常工作。 GitHub Pages 尝试在 https://.github.io/Images/myImage.png 而不是 https://.github.io/your-repo-name/Images/myImage.png 查找图像,导致 404 错误。

解决方案:使用 BASE_URL

要解决此问题,请将所有图像移至公共/图像中,虽然这是可选的,但我强烈建议您这样做。您将根据环境动态地将 BASE_URL 添加到图像路径:

  1. 定义一个依赖于环境的BASE_URL常量:

   const BASE_URL = import.meta.env.BASE_URL;


  1. 引用图像时使用此 BASE_URL:

   thumbnail

注意:不要忘记删除 Images 前面的 /,否则它会加倍,一个来自 BASE_URL,另一个来自您忘记删除的 /Images。

这可确保在开发 (localhost) 和生产 (GitHub Pages) 中使用正确的路径。


第 4 步:最终部署

实施路由和图像路径修复后,重建并重新部署您的应用程序:


npm run build
npm run deploy


您的 Vite/React 应用程序现在应该已完全部署,所有图像均已正确渲染,所有路由均已正确处理。

总之:

  1. 路由问题:在 GitHub Pages 等静态部署中使用 HashRouter 进行正确路由。
  2. 路由上的 404 错误:创建 404.html 文件以确保 GitHub Pages 正确为您的应用程序提供服务。
  3. 图像未加载:将所有图像移至 Public/Images 并将 BASE_URL 动态附加到您的资源路径以处理开发和生产环境。

通过这些步骤,您的 Vite/React 应用程序应该可以在 GitHub Pages 上正常运行并顺利运行。祝您编码和部署愉快!

版本声明 本文转载于:https://dev.to/usooldatascience/deploying-a-vitereact-application-with-images-a-complete-guide-12p3?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 购买亚马逊评论
    购买亚马逊评论
    https://dmhelpshop.com/product/buy-amazon-reviews/ 购买亚马逊评论 当谈到在亚马逊上进行商务和销售产品时,评论的重要性怎么强调都不为过。一条评论就可以决定购买的成败,而潜在的买家往往会犹豫是否购买缺乏评论的产品。缺乏评论可以起到威慑作用,这就是为什么...
    编程 发布于2024-11-07
  • 使用 DTO 简化 Laravel 中的数据传输
    使用 DTO 简化 Laravel 中的数据传输
    这是有关如何使用 Laravel Data: 创建数据传输对象 (DTO) 的分步示例 1. 安装Laravel数据包 首先,使用 Composer 安装 spatie/laravel-data 包。该软件包有助于创建 DTO 并有效管理数据。 composer require sp...
    编程 发布于2024-11-07
  • Go中如何查找与源文件相关的文件?
    Go中如何查找与源文件相关的文件?
    在Go中查找相对于源文件的文件与解释性语言不同,Go程序是经过编译的,执行时不需要源文件。因此,Ruby 中使用 __FILE__ 来相对于源文件定位文件的概念在 Go 中并不适用。相反,Go 提供了 runtime.Caller 函数,该函数返回调用时的文件名。汇编。但是,此信息对于动态定位文件并...
    编程 发布于2024-11-07
  • 如何在 Python 中高效地统计项目出现次数?
    如何在 Python 中高效地统计项目出现次数?
    提高效率的 Python 中项目频率计数计算列表中项目的出现次数是一项常见的编程任务。这个问题探讨了在 Python 中解决此问题的更有效方法。最初提供的代码虽然功能强大,但涉及到对列表进行两次迭代,从而导致性能不佳。关键的挑战在于找到一种 Pythonic 方法来计算项目出现次数,而无需重复遍历列...
    编程 发布于2024-11-07
  • 探索异步 Deepgram API:使用 Python 进行语音转文本
    探索异步 Deepgram API:使用 Python 进行语音转文本
    今天将探索用于将语音转换为文本的 Deepgram API [转录]。无论是构建语音助手、转录会议还是创建语音控制应用程序,Deepgram 都让入门变得比以往更容易。 什么是 Deepgram? Deepgram 是一个强大的语音识别平台,它使用先进的机器学习模型来实时转录音频。它...
    编程 发布于2024-11-07
  • 如何处理 PHP JSON 编码中格式错误的 UTF-8 字符?
    如何处理 PHP JSON 编码中格式错误的 UTF-8 字符?
    处理 PHP JSON 编码中格式错误的 UTF-8 字符使用 json_encode() 序列化包含俄语字符的数组时,您可能会遇到与格式错误的 UTF-8 字符相关的错误。要解决此问题,请执行以下步骤:步骤 1:识别字符编码使用 mb_detect_encoding() 确定包含俄语字符的字段的编...
    编程 发布于2024-11-07
  • 在 Java 认证考试中使用 Var 的 ips
    在 Java 认证考试中使用 Var 的 ips
    Java 认证考试需要深入了解该语言及其各种功能,包括使用 var 进行局部变量类型推断。虽然这看起来像是一个小细节,但它会极大地影响代码的可读性和效率。为了帮助您在 Java 认证考试中取得好成绩,这里有四个在代码中使用 var 的技巧: 1.在增强的 for 循环中使用 var: 由于循环控制变...
    编程 发布于2024-11-07
  • 通过制作(愚蠢的)故事生成器来学习状态管理(学习 Modulo.js - 第 f 部分
    通过制作(愚蠢的)故事生成器来学习状态管理(学习 Modulo.js - 第 f 部分
    ?欢迎回来!没听懂第 1 部分吗?不用担心,您可以从头开始,也可以直接从这里开始! 简介:SillyStory Web 组件 本教程中我们的任务是构建一个故事生成组件。这将为我们提供大量使用 State 的练习。上次我们以一个有点像下面的片段结束。然而,在本教程中,我们更改了“模板”...
    编程 发布于2024-11-07
  • 获取下一行学习如何处理文件描述符和系统 I/O 的项目
    获取下一行学习如何处理文件描述符和系统 I/O 的项目
    在 C 编程领域,有效管理输入、输出和内存是基础。为了帮助您掌握这些关键概念,您将在 get_next_line 项目中编写一个使用文件描述符逐行读取文件的函数。每次调用该函数都会从文件中读取下一行,从而允许您一次一行处理整个文件内容。 了解系统中的文件描述符和 I/O ...
    编程 发布于2024-11-07
  • 为什么Go的main函数有死循环?
    为什么Go的main函数有死循环?
    Go 运行时:主函数中无限循环之谜Go 运行时的核心位于 src/runtime/proc.go,其中有一个令人费解的功能:主函数末尾有一个无限的 for 循环。人们可能想知道为什么运行时中存在这样一个看似毫无意义的构造。目的:检测致命错误深入研究代码,很明显循环服务于错误处理的关键目的。当发生致命...
    编程 发布于2024-11-07
  • iostream 与 iostream.h:在现代 C++ 中应该使用哪个?
    iostream 与 iostream.h:在现代 C++ 中应该使用哪个?
    iostream 和 iostream.h 之间的区别在 C 中,程序员可能会遇到两个具有类似目的的术语:iostream 和 iostream.h 。本指南旨在阐明两者之间的根本区别。iostream.h:已弃用的旧版本iostream.h 是 C 库中的一个头文件,它提供一组输入/输出函数。对于...
    编程 发布于2024-11-07
  • VLONE Clothing:重新定义都市时尚的街头服饰品牌
    VLONE Clothing:重新定义都市时尚的街头服饰品牌
    VLONE 是少数几个在快速变化的市场中取得超越街头服饰行业所能想象的成就的品牌之一。 VLONE 由 A$AP Mob 集体的电影制片人之一 A$AP Bari 创立,现已发展成为一个小众项目,有时甚至成为都市时尚界的国际知名品牌。 VLONE 凭借大胆的图案、深厚的文化联系和限量版发售,在时尚界...
    编程 发布于2024-11-07
  • 如何使用PDO查询单行中的单列?
    如何使用PDO查询单行中的单列?
    使用 PDO 查询单行中的单列处理针对单行中特定列的 SQL 查询时,通常需要检索直接取值,无需循环。要使用 PDO 完成此操作,fetchColumn() 方法就派上用场了。fetchColumn() 的语法为:$col_value = $stmt->fetchColumn([column_...
    编程 发布于2024-11-07
  • 我是如何构建 PeerSplit:一款免费的点对点费用分摊应用程序 — 从构思到发布仅需数周时间
    我是如何构建 PeerSplit:一款免费的点对点费用分摊应用程序 — 从构思到发布仅需数周时间
    我构建了 PeerSplit——一个免费的、点对点的 Splitwise 替代品——从想法到发布仅用了两周时间! PeerSplit 是一款本地优先的应用程序,用于分配团体费用。它可以离线工作,100% 免费且私密,不需要注册或任何个人数据。 以下是我如何构建它以及我在此过程中学到的一切。 ...
    编程 发布于2024-11-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3