链接优化
This commit is contained in:
parent
b7ea988888
commit
1f07656749
@ -1,78 +0,0 @@
|
|||||||
# 部署说明
|
|
||||||
|
|
||||||
本项目支持多种部署方式,每种方式都有对应的构建命令。
|
|
||||||
|
|
||||||
## 🚀 部署方式
|
|
||||||
|
|
||||||
### 1. GitHub Pages(自动部署)
|
|
||||||
|
|
||||||
**特点**:推送代码到 `main` 或 `master` 分支后自动部署
|
|
||||||
**URL格式**:`https://username.github.io/obs-overlay-widget/`
|
|
||||||
|
|
||||||
**设置步骤**:
|
|
||||||
1. 推送代码到GitHub仓库
|
|
||||||
2. 在仓库设置中启用GitHub Pages
|
|
||||||
- 进入 Settings → Pages
|
|
||||||
- Source 选择 "GitHub Actions"
|
|
||||||
3. GitHub Actions会自动构建和部署
|
|
||||||
|
|
||||||
### 2. 手动部署(任意服务器)
|
|
||||||
|
|
||||||
**特点**:适用于任何Web服务器,包括Apache、Nginx、静态托管服务等
|
|
||||||
**构建命令**:
|
|
||||||
```bash
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
**部署步骤**:
|
|
||||||
1. 运行构建命令
|
|
||||||
2. 将 `dist` 文件夹中的所有文件上传到服务器
|
|
||||||
3. 可以部署到根目录或任何子目录
|
|
||||||
|
|
||||||
### 3. GitHub Pages(手动构建)
|
|
||||||
|
|
||||||
**特点**:如果你需要手动为GitHub Pages构建
|
|
||||||
**构建命令**:
|
|
||||||
```bash
|
|
||||||
npm run build:github
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📝 构建命令说明
|
|
||||||
|
|
||||||
| 命令 | 用途 | base路径 | 适用场景 |
|
|
||||||
|------|------|----------|----------|
|
|
||||||
| `npm run dev` | 开发服务器 | `/` | 本地开发 |
|
|
||||||
| `npm run build` | 生产构建 | `./` | 手动部署到任意服务器 |
|
|
||||||
| `npm run build:github` | GitHub Pages构建 | `/obs-overlay-widget/` | 手动GitHub Pages部署 |
|
|
||||||
| `npm run preview` | 预览构建结果 | - | 本地测试构建结果 |
|
|
||||||
|
|
||||||
## 🛠️ 技术说明
|
|
||||||
|
|
||||||
### Base路径配置
|
|
||||||
|
|
||||||
项目使用智能的base路径配置:
|
|
||||||
|
|
||||||
- **开发模式**:使用 `/` 作为base路径
|
|
||||||
- **生产模式**:
|
|
||||||
- 默认使用 `./`(相对路径),适用于任何部署位置
|
|
||||||
- 如果设置了 `VITE_BASE_PATH` 环境变量,则使用指定路径
|
|
||||||
|
|
||||||
### 自动化部署
|
|
||||||
|
|
||||||
GitHub Actions工作流(`.github/workflows/deploy.yml`)会:
|
|
||||||
1. 检测代码变更
|
|
||||||
2. 安装依赖
|
|
||||||
3. 使用 `npm run build:github` 构建项目
|
|
||||||
4. 自动部署到GitHub Pages
|
|
||||||
|
|
||||||
## 🔧 自定义部署
|
|
||||||
|
|
||||||
如果你的仓库名不是 `obs-overlay-widget`,需要修改:
|
|
||||||
|
|
||||||
1. **vite.config.ts** 中的仓库名
|
|
||||||
2. **package.json** 中 `build:github` 脚本的路径
|
|
||||||
|
|
||||||
例如,如果仓库名是 `my-widget`:
|
|
||||||
```json
|
|
||||||
"build:github": "vue-tsc -b && cross-env VITE_BASE_PATH=/my-widget/ vite build"
|
|
||||||
```
|
|
47
QUICK-SETUP.md
Normal file
47
QUICK-SETUP.md
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# 🚀 快速部署指南
|
||||||
|
|
||||||
|
## 准备工作
|
||||||
|
|
||||||
|
1. **Fork或下载此项目**
|
||||||
|
2. **更新GitHub用户名**:
|
||||||
|
|
||||||
|
### 在Windows上:
|
||||||
|
```cmd
|
||||||
|
setup-readme.bat YOUR_GITHUB_USERNAME
|
||||||
|
```
|
||||||
|
|
||||||
|
### 在Linux/Mac上:
|
||||||
|
```bash
|
||||||
|
chmod +x setup-readme.sh
|
||||||
|
./setup-readme.sh YOUR_GITHUB_USERNAME
|
||||||
|
```
|
||||||
|
|
||||||
|
### 手动更新:
|
||||||
|
如果脚本无法运行,请手动替换README.md中所有的`USERNAME`为你的GitHub用户名。
|
||||||
|
|
||||||
|
## 部署到GitHub Pages
|
||||||
|
|
||||||
|
1. **提交更改**:
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Setup project for deployment"
|
||||||
|
git push origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **启用GitHub Pages**:
|
||||||
|
- 访问你的GitHub仓库
|
||||||
|
- 进入 Settings → Pages
|
||||||
|
- Source 选择 "GitHub Actions"
|
||||||
|
|
||||||
|
3. **等待部署完成**:
|
||||||
|
- 查看Actions页面的构建状态
|
||||||
|
- 几分钟后访问:`https://YOUR_GITHUB_USERNAME.github.io/obs-overlay-widget/`
|
||||||
|
|
||||||
|
## 验证部署
|
||||||
|
|
||||||
|
✅ 构建状态正常
|
||||||
|
✅ 网站可以访问
|
||||||
|
✅ 小组件配置正常工作
|
||||||
|
✅ 预览链接生成正确
|
||||||
|
|
||||||
|
恭喜!你的OBS小组件工具已经成功部署!🎉
|
126
README.md
126
README.md
@ -1,7 +1,43 @@
|
|||||||
# OBS 悬浮小组件
|
# OBS 悬浮小组件
|
||||||
|
|
||||||
|
[](https://github.com/USERNAME/obs-overlay-widget/actions/workflows/deploy.yml)
|
||||||
|
[](https://USERNAME.github.io/obs-overlay-widget/)
|
||||||
|
[](https://vuejs.org/)
|
||||||
|
[](https://www.typescriptlang.org/)
|
||||||
|
[](https://vitejs.dev/)
|
||||||
|
|
||||||
一个为 OBS Studio 直播和录制场景开发的高度可定制化小组件集合,基于 Vue 3、TypeScript 和 Vite 构建。
|
一个为 OBS Studio 直播和录制场景开发的高度可定制化小组件集合,基于 Vue 3、TypeScript 和 Vite 构建。
|
||||||
|
|
||||||
|
## 🚀 在线预览
|
||||||
|
|
||||||
|
📺 **[立即体验 - GitHub Pages](https://USERNAME.github.io/obs-overlay-widget/)**
|
||||||
|
|
||||||
|
> 注意:请将上面链接中的 `USERNAME` 替换为你的 GitHub 用户名
|
||||||
|
|
||||||
|
## 📦 快速开始
|
||||||
|
|
||||||
|
### 方式一:直接使用(推荐)
|
||||||
|
直接访问 [在线版本](https://USERNAME.github.io/obs-overlay-widget/),配置你的小组件并复制生成的URL到OBS中使用。
|
||||||
|
|
||||||
|
### 方式二:本地部署
|
||||||
|
```bash
|
||||||
|
# 克隆项目
|
||||||
|
git clone https://github.com/USERNAME/obs-overlay-widget.git
|
||||||
|
cd obs-overlay-widget
|
||||||
|
|
||||||
|
# 安装依赖
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# 启动开发服务器
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎯 部署状态
|
||||||
|
|
||||||
|
- **主分支构建**:[](https://github.com/USERNAME/obs-overlay-widget/actions/workflows/deploy.yml)
|
||||||
|
- **在线版本**:[https://USERNAME.github.io/obs-overlay-widget/](https://USERNAME.github.io/obs-overlay-widget/)
|
||||||
|
- **最后更新**:自动同步 GitHub 主分支
|
||||||
|
|
||||||
## 功能特点
|
## 功能特点
|
||||||
|
|
||||||
- **多种小组件**:内置时钟、日期、文本、图片等多种可配置小组件
|
- **多种小组件**:内置时钟、日期、文本、图片等多种可配置小组件
|
||||||
@ -91,7 +127,9 @@
|
|||||||
- 运动计时:适合健身和运动的动感样式
|
- 运动计时:适合健身和运动的动感样式
|
||||||
- 简约风格:简洁的极简主义设计
|
- 简约风格:简洁的极简主义设计
|
||||||
|
|
||||||
## 开发
|
## 💻 开发
|
||||||
|
|
||||||
|
### 基础命令
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 安装依赖
|
# 安装依赖
|
||||||
@ -100,13 +138,34 @@ npm install
|
|||||||
# 启动开发服务器
|
# 启动开发服务器
|
||||||
npm run dev
|
npm run dev
|
||||||
|
|
||||||
# 构建生产版本
|
# 构建生产版本(适用于手动部署)
|
||||||
npm run build
|
npm run build
|
||||||
|
|
||||||
|
# 构建GitHub Pages版本
|
||||||
|
npm run build:github
|
||||||
|
|
||||||
# 预览生产构建
|
# 预览生产构建
|
||||||
npm run preview
|
npm run preview
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 🚀 部署方式
|
||||||
|
|
||||||
|
| 部署方式 | 构建命令 | 说明 |
|
||||||
|
|----------|----------|------|
|
||||||
|
| **GitHub Pages** | `npm run build:github` | 自动部署,推送到main分支即可 |
|
||||||
|
| **手动部署** | `npm run build` | 将`dist`文件夹上传到任意Web服务器 |
|
||||||
|
| **开发预览** | `npm run dev` | 本地开发和测试 |
|
||||||
|
|
||||||
|
### 🔄 自动部署
|
||||||
|
|
||||||
|
项目配置了GitHub Actions自动部署:
|
||||||
|
|
||||||
|
1. **触发条件**:推送代码到`main`或`master`分支
|
||||||
|
2. **构建过程**:自动安装依赖、构建、部署到GitHub Pages
|
||||||
|
3. **访问地址**:`https://USERNAME.github.io/obs-overlay-widget/`
|
||||||
|
|
||||||
|
查看部署状态:[](https://github.com/USERNAME/obs-overlay-widget/actions)
|
||||||
|
|
||||||
## 项目结构
|
## 项目结构
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -388,13 +447,62 @@ case 'new':
|
|||||||
2. 为所有配置选项提供默认值
|
2. 为所有配置选项提供默认值
|
||||||
3. 使用适当的空值检查(例如:`props.config.property || defaultValue`)
|
3. 使用适当的空值检查(例如:`props.config.property || defaultValue`)
|
||||||
|
|
||||||
## 与 OBS Studio 集成
|
## 🎬 与 OBS Studio 集成
|
||||||
|
|
||||||
1. 在 Web 服务器或本地运行此应用
|
1. **获取小组件URL**:
|
||||||
2. 使用配置界面设置您的小组件
|
- 访问 [在线配置页面](https://hanxuanyu.github.io/obs-overlay-widget/)
|
||||||
3. 复制生成的 URL
|
- 选择和配置您需要的小组件
|
||||||
4. 在 OBS Studio 中:
|
- 复制生成的URL
|
||||||
|
|
||||||
|
2. **在OBS中添加浏览器源**:
|
||||||
- 向您的场景添加"浏览器源"
|
- 向您的场景添加"浏览器源"
|
||||||
- 将 URL 粘贴到浏览器源 URL 字段
|
- 将URL粘贴到浏览器源URL字段
|
||||||
- 根据需要设置宽度和高度
|
- 设置合适的宽度和高度
|
||||||
- 勾选"不可见时关闭源"以获得更好的性能
|
- 勾选"不可见时关闭源"以获得更好的性能
|
||||||
|
|
||||||
|
3. **推荐设置**:
|
||||||
|
- 宽度:1920px(或您的分辨率宽度)
|
||||||
|
- 高度:1080px(或您的分辨率高度)
|
||||||
|
- 自定义CSS:`body { margin: 0; }`
|
||||||
|
|
||||||
|
## 📊 项目状态
|
||||||
|
|
||||||
|
- **构建状态**:[](https://github.com/hanxuanyu/obs-overlay-widget/actions)
|
||||||
|
- **在线版本**:[](https://hanxuanyu.github.io/obs-overlay-widget/)
|
||||||
|
- **许可证**:MIT
|
||||||
|
- **技术栈**:Vue 3 + TypeScript + Vite + Element Plus
|
||||||
|
|
||||||
|
## 🤝 贡献
|
||||||
|
|
||||||
|
欢迎提交Issue和Pull Request!
|
||||||
|
|
||||||
|
1. Fork 本仓库
|
||||||
|
2. 创建你的特性分支 (`git checkout -b feature/AmazingFeature`)
|
||||||
|
3. 提交你的更改 (`git commit -m 'Add some AmazingFeature'`)
|
||||||
|
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
||||||
|
5. 开启一个Pull Request
|
||||||
|
|
||||||
|
## 📝 更新日志
|
||||||
|
|
||||||
|
### v1.0.0
|
||||||
|
- ✨ 基础小组件集合(时钟、日期、文本、图片、计时器)
|
||||||
|
- 🎨 可视化配置界面
|
||||||
|
- 🚀 GitHub Pages自动部署
|
||||||
|
- 📱 响应式设计
|
||||||
|
- 🔧 TypeScript支持
|
||||||
|
|
||||||
|
## 📄 许可证
|
||||||
|
|
||||||
|
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情
|
||||||
|
|
||||||
|
## 🙏 致谢
|
||||||
|
|
||||||
|
- [Vue 3](https://vuejs.org/) - 渐进式JavaScript框架
|
||||||
|
- [Element Plus](https://element-plus.org/) - Vue 3 UI组件库
|
||||||
|
- [Vite](https://vitejs.dev/) - 下一代前端构建工具
|
||||||
|
- [TypeScript](https://www.typescriptlang.org/) - JavaScript的超集
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
**⭐ 如果这个项目对你有帮助,请给个Star支持一下!**
|
||||||
|
43
src/utils/urlUtils.ts
Normal file
43
src/utils/urlUtils.ts
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/**
|
||||||
|
* URL工具函数
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取应用的基础URL路径
|
||||||
|
* 用于生成正确的预览链接,支持不同的部署环境
|
||||||
|
*/
|
||||||
|
export function getAppBaseUrl(): string {
|
||||||
|
const origin = window.location.origin;
|
||||||
|
|
||||||
|
// 获取Vite配置的base路径
|
||||||
|
let basePath = import.meta.env.BASE_URL;
|
||||||
|
|
||||||
|
// 如果base路径是相对路径(如'./'),需要根据当前页面路径来确定完整路径
|
||||||
|
if (basePath.startsWith('./')) {
|
||||||
|
// 从当前路径中提取base路径
|
||||||
|
const currentPath = window.location.pathname;
|
||||||
|
const pathSegments = currentPath.split('/').filter(Boolean);
|
||||||
|
|
||||||
|
// 如果当前路径包含index.html,移除它
|
||||||
|
if (pathSegments[pathSegments.length - 1] === 'index.html') {
|
||||||
|
pathSegments.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重建base路径
|
||||||
|
basePath = pathSegments.length > 0 ? `/${pathSegments.join('/')}/` : '/';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清理base路径,确保格式正确
|
||||||
|
const cleanBasePath = basePath === '/' ? '' : basePath.replace(/\/$/, '');
|
||||||
|
|
||||||
|
return `${origin}${cleanBasePath}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成预览URL
|
||||||
|
* @param configData 配置数据字符串
|
||||||
|
*/
|
||||||
|
export function generatePreviewUrl(configData: string): string {
|
||||||
|
const baseUrl = getAppBaseUrl();
|
||||||
|
return `${baseUrl}/#/preview?data=${configData}`;
|
||||||
|
}
|
@ -44,6 +44,7 @@ import { ref, computed, onMounted, watch } from 'vue';
|
|||||||
import { CopyDocument, View } from '@element-plus/icons-vue';
|
import { CopyDocument, View } from '@element-plus/icons-vue';
|
||||||
import { ElMessage } from 'element-plus';
|
import { ElMessage } from 'element-plus';
|
||||||
import { encodeConfig, decodeConfig } from '../utils/configUtils';
|
import { encodeConfig, decodeConfig } from '../utils/configUtils';
|
||||||
|
import { generatePreviewUrl } from '../utils/urlUtils';
|
||||||
|
|
||||||
// 导入小组件注册表
|
// 导入小组件注册表
|
||||||
import { widgets, getDefaultConfig } from '../widgets/registry';
|
import { widgets, getDefaultConfig } from '../widgets/registry';
|
||||||
@ -78,12 +79,12 @@ const updateWidgetConfig = (newConfig: any) => {
|
|||||||
|
|
||||||
// 生成预览 URL
|
// 生成预览 URL
|
||||||
const updateGeneratedUrl = () => {
|
const updateGeneratedUrl = () => {
|
||||||
const baseUrl = window.location.origin;
|
|
||||||
const configStr = encodeConfig({
|
const configStr = encodeConfig({
|
||||||
type: selectedWidget.value,
|
type: selectedWidget.value,
|
||||||
config: currentWidgetConfig.value
|
config: currentWidgetConfig.value
|
||||||
});
|
});
|
||||||
generatedUrl.value = `${baseUrl}/#/preview?data=${configStr}`;
|
|
||||||
|
generatedUrl.value = generatePreviewUrl(configStr);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 复制 URL 到剪贴板
|
// 复制 URL 到剪贴板
|
||||||
|
Loading…
x
Reference in New Issue
Block a user