React/Vue 项目在 GitHub Pages 上部署时资源的路径问题

GitHub Pages 常被用来部署个人博客,而无论是大名鼎鼎的 Jekyll,还是 Hugo 或者 Hexo,他们都是将我们的文章嵌入模板,发布为静态页面,也就是说,GitHub Pages (Gitee Pages) 只支持托管静态页面,包括页面所需的静态资源。
如我们所知, React 和 Vue 都包含一个对应的路由插件,而这个路由插件会有两种模式: Hash 模式 和 History 模式。关于两者最的基本区别可以参考 Vue-Router 中的描述,下一段是阐述,熟悉 Router 的话可以跳过。
React 和 Vue 的路由旨在使得构建单页面应用更加方便。单页面应用中各屏展示的内容其实是由 JavaScript 渲染完成,所以,以 Vue 的 History 模式为例, 假设天才程序猿王花花的 GitHub 账号为 http://whh.github.io/,他写了一个 Vue 音乐应用并上传到仓库 http://whh.github.io/music,其中的 “关于” 页面是 /about ,当我们访问该页面时,我们的页面并未直接向后台发送请求,而浏览器的地址栏中却看似已经 “跳转” 到该页面了,显示为 http://whh.github.io/about。
接着,我们简单提一下 GitHub Pages。我们将项目分为两类:项目名为 用户名.github.io,普通项目。前者发布后的地址为 https://用户名.github.io/,后者的地址为 https://用户名.github.io/项目名。
当我们将 Vue 打包好的 /dist 文件夹作为 GitHub Pages 的目录时,如果该项目为上述第二种,我们会发现王花花的 “关于” 页面的资源地址为 /css/xxx.css ,即浏览器请求的地址为 http://whh.github.io/css/xxx.css ,而我们的资源实际的存放地址为http://whh.github.io/music/css/xxx.css ,因为我们的 css 文件在 music 项目下,这时就会有问题了。
因为打包后页面中的资源链接地址 /css/xxx.css 是绝对路径,找到问题后,我们可以将地址改为相对路径 ./css/xxx.css ,在 Vue 最新的脚手架工具 @vue/cli 3.0+ 中,我们可以通过配置 vue.config.js 文件来修改 baseUrl 为 './',在 React 中可以修改 PUBLIC_URL ,找到 node_modules/react-script/config/paths.js 中如下一段:
function getServedPath(appPackageJson) {
const publicUrl = getPublicUrl(appPackageJson);
const servedUrl =
envPublicUrl || (publicUrl ? url.parse(publicUrl).pathname : '/
');
return ensureSlash(servedUrl, true);
}
把 '/' 改为 './' 即可。然后再次打包。
不理智的建议:其实你也可以根据项目名去更改 baseUrl 和 PUBLIC_URL。
哈希模式 实际上是一样的,资源的路径也需要修改一下。
但是当我们的项目是类似以 whh.github.io 命名时,就不需要考虑该问题,因为这个项目的 GitHub Pages 所需的资源就在根目录下,而不是在二级目录 https://whh.github.io/music 中,体会一下。
React/Vue 项目在 GitHub Pages 上部署时资源的路径问题的更多相关文章
- 在github Pages上部署octopress搭建个人博客系统
原文链接:http://caiqinghua.github.io/blog/2013/08/26/deploy-octopress-to-github-pages/ 引子 上一篇博客已经说了为什么要搭 ...
- 使用 github pages快速部署自己的静态网页
看见很多大神在Github Pages上部署Demo,感觉效果还不错,刚才自己也试了一下,发现其实并不难! 选择 github pages 的理由 使用零成本: github pages 集成在 gi ...
- 利用Octopress在github pages上搭建个人博客
利用Octopress在github pages上搭建个人博客 SEP 29TH, 2013 在GitHub Pages上用Octopress搭建博客,需要安装ruby环境.git环境等.本人在Fed ...
- 用Octopress在Github pages上写博客
安装Git环境 下载msysgit(git for windows),并安装. 可以选择安装TortoiseGit,这个在windows的资源管理器里装了很多git的右键菜单,对git命令行不熟悉的同 ...
- 让搭建在 Github Pages 上的 Hexo 博客可以被 Google 搜索到
title: 让搭建在Github Pages上的Hexo博客可以被Google搜索到 date: 2019-05-30 23:35:44 tags: 配置 --- 准备工作 搭建好的博客 npm & ...
- Django项目在Linux服务器上部署和躺过的坑
引言 在各方的推荐下,领导让我在测试环境部署之前开发的测试数据预报平台.那么问题来了,既然要在服务器上部署, 就需要准备: 1.linux服务器配置 2.linux安装python环境搭建与配置 3. ...
- skiasharp在阿里云Windows server 2016上部署时提示The type initializer for 'SkiaSharp.SKAbstractManagedStream' threw an exception. 错误
应用环境及问题描述: Windows Server 2016,.Net core 2.1, Skiasharp作为跨平台的图像处理组件在生成缩略图时出错,本地测试都是正常的,部署到服务器无法生成缩略图 ...
- 使用jekyll在GitHub Pages上搭建个人博客【转】
网上有不少资源,但大多是“授人以鱼”,文中一步一步的告诉你怎么做,却没有解释为什么,以及他是如何知道的.他们默认着你知道种种专业名词的含义,默认着你掌握着特定技能.你折腾半天,查资料,看教程,一步步下 ...
- vue-router+webpack线上部署时单页项目路由,刷新页面出现404问题
使用vue项目,线上部署的时候,访问首页以及通过路由打开二级页面没有问题,但是一刷新就出现404现象 因为刷新页面时访问的资源在服务端找不到,因为vue-router设置的路由不是真实存在的路径. 解 ...
随机推荐
- nanogui之更新子模块glfw3.3.2踩坑总结
nanogui源码下载: A . https://github.com/wjakob/nanogui B . https://github.com/dalerank/nanogui B是fork的A, ...
- 【LeetCode】383. Ransom Note 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 [LeetCo ...
- B. The Meeting Place Cannot Be Changed
B. The Meeting Place Cannot Be Changed time limit per test 5 seconds memory limit per test 256 megab ...
- Chapter 6 Graphical Representation of Causal Effects
目录 6.1 Causal diagrams 6.2 Causal diagrams and marginal independence 6.3 Causal diagrams and conditi ...
- [Guide]Google Python Style Guide
扉页 项目主页 Google Style Guide Google 开源项目风格指南 - 中文版 背景 Python 是Google主要的脚本语言.这本风格指南主要包含的是针对python的编程准则. ...
- CS5265完美替代CH7211|Type-C转HDMI2.0单转方案|CH7211替代方案
龙迅Chrontel的CH7211是一款Type-C转HDMI2.0半导体设备,可通过USB Type-C连接器将DisplayPort信号转换为HDMI/DVI.这款创新的基于USB Type-C的 ...
- CS5211替代LT7211 DP转LVDS芯片方案 替代龙迅LT7211方案
LT7211是一种用于虚拟现实/显示应用的高性能C/DP1.2至LVDS芯片方案.LT7211支持DP1.2输入,LT7211可以配置为1.2.4车道,还支持车道交换功能.自适应均衡使其适用于长电缆应 ...
- 关于 base64 编码
一.什么是Base64编码 Base64是一种用64个字符来表示任意二进制数据的方法.它是一种编码方式,而非加密方式.它通过将二进制数据转变为64个"可打印字符",完成了数据在HT ...
- MySQL数据操作与查询笔记 • 【目录】
持续更新中- 我的大学笔记>>> 章节 内容 第1章 MySQL数据操作与查询笔记 • [第1章 MySQL数据库基础] 第2章 MySQL数据操作与查询笔记 • [第2章 表结构管 ...
- dart系列之:dart代码最佳实践
目录 简介 命名规则 import中的顺序 格式化 总结 简介 每种语言都有自己的代码风格,这种代码风格是跟语言特性息息相关的.如果在编码的过程中遵循这种统一的编码规则,会给我们的业务带来非常多的便利 ...