Files
ComfyUI-Lora-Manager/BUILD_WORKFLOW_SOLUTIONS.md
Will Miao 32249d1886 feat: add Vue widget demo node and development support
- Add LoraManagerDemoNode to node mappings for Vue widget demonstration
- Update .gitignore to exclude Vue widget development artifacts (node_modules, .vite, dist)
- Implement automatic Vue widget build check in development mode with fallback handling
- Maintain pytest compatibility with proper import error handling
2026-01-10 17:45:26 +08:00

268 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Vue Widget 构建流程解决方案
## 问题分析
当前配置问题:
- ✅ Vue源代码在 `vue-widgets/src/`
- ✅ 构建产物输出到 `web/comfyui/vue-widgets/`
-**构建产物被 `.gitignore` 忽略,不会提交到仓库**
-**用户安装后没有构建产物widget无法工作**
## 解决方案对比
### 方案1提交构建产物到Git推荐 ⭐)
**优点:**
- ✅ 用户安装即可用,无需额外步骤
- ✅ 最简单可靠
- ✅ 适合大多数ComfyUI用户不一定有Node.js环境
- ✅ 与现有ComfyUI插件生态一致
**缺点:**
- ⚠️ Git仓库略大每次构建产物变化都会commit
- ⚠️ 需要确保开发者提交前构建
**实现方式:**
1.`.gitignore` 移除 `web/comfyui/vue-widgets/`
2. 添加 pre-commit hook 自动构建
3. 提交构建产物到仓库
**适用场景:**
- 生产环境发布
- 用户通过ComfyUI Manager或git clone安装
---
### 方案2用户安装时自动构建
**优点:**
- ✅ Git仓库小只包含源代码
- ✅ 始终使用最新代码构建
- ✅ 开发者友好
**缺点:**
- ❌ 要求用户有Node.js环境
- ❌ 安装时间长需要npm install + build
- ❌ 可能构建失败影响安装体验
- ❌ ComfyUI Manager可能不支持
**实现方式:**
1. 保持 `.gitignore` 设置
2. 添加安装脚本自动检测并构建
3. 在Python `__init__.py` 启动时检查构建产物
**适用场景:**
- 开发环境
- 技术用户
---
### 方案3混合方案开发 + 生产分离)
**优点:**
- ✅ 开发时只提交源代码
- ✅ Release时提供完整构建
- ✅ Git仓库保持干净
- ✅ 用户安装release版本即可用
**缺点:**
- ⚠️ 需要CI/CD配置
- ⚠️ 工作流稍复杂
**实现方式:**
1. 开发分支gitignore构建产物
2. GitHub Actions自动构建
3. Release分支/Tag包含构建产物
4. 用户安装release版本
**适用场景:**
- 成熟项目
- 多人协作开发
---
### 方案4Python启动时自动构建智能方案
**优点:**
- ✅ 自动检测是否需要构建
- ✅ 开发模式自动构建
- ✅ 生产模式使用已有构建
- ✅ 最灵活
**缺点:**
- ⚠️ 需要编写构建检测逻辑
- ⚠️ 首次启动可能较慢
**实现方式:**
1.`__init__.py` 中检查构建产物
2. 如果不存在或过期,尝试自动构建
3. 如果无Node.js环境给出明确提示
**适用场景:**
- 开发+生产通用
- 技术用户为主
---
## 推荐实现方案1 + 方案4 组合
### 为什么?
1. **对普通用户**:提交构建产物,安装即用
2. **对开发者**pre-commit hook确保提交前构建
3. **智能检测**Python启动时检查开发模式可自动重建
### 实现步骤
#### Step 1: 修改 .gitignore提交构建产物
```bash
# 移除这行:
# web/comfyui/vue-widgets/
# 但保留源码构建缓存:
vue-widgets/node_modules/
vue-widgets/dist/
```
#### Step 2: 添加 pre-commit hook
创建 `.husky/pre-commit` 或使用简单的git hook
```bash
#!/bin/sh
# 在commit前自动构建Vue widgets
cd vue-widgets && npm run build && cd .. && git add web/comfyui/vue-widgets/
```
#### Step 3: 在Python中添加智能检测
`__init__.py` 或专门的构建检查模块中:
```python
import os
import subprocess
from pathlib import Path
def check_vue_widgets_build():
"""检查Vue widgets是否已构建如果需要则自动构建"""
project_root = Path(__file__).parent
build_file = project_root / "web/comfyui/vue-widgets/demo-widget.js"
src_dir = project_root / "vue-widgets/src"
# 如果构建产物不存在
if not build_file.exists():
print("[LoRA Manager] Vue widget build not found, attempting to build...")
try:
result = subprocess.run(
["npm", "run", "build"],
cwd=project_root / "vue-widgets",
capture_output=True,
timeout=120
)
if result.returncode == 0:
print("[LoRA Manager] ✓ Vue widgets built successfully")
else:
print(f"[LoRA Manager] ⚠️ Build failed: {result.stderr.decode()}")
print("[LoRA Manager] Please run: cd vue-widgets && npm install && npm run build")
except FileNotFoundError:
print("[LoRA Manager] ⚠️ Node.js not found. Please install Node.js and run:")
print("[LoRA Manager] cd vue-widgets && npm install && npm run build")
except Exception as e:
print(f"[LoRA Manager] ⚠️ Build error: {e}")
# 检查源代码是否比构建产物新(开发模式)
elif src_dir.exists():
src_mtime = max(f.stat().st_mtime for f in src_dir.rglob("*") if f.is_file())
build_mtime = build_file.stat().st_mtime
if src_mtime > build_mtime:
print("[LoRA Manager] Source code newer than build, rebuilding...")
# 同样的构建逻辑
```
#### Step 4: package.json 添加便捷脚本
```json
{
"scripts": {
"dev": "vite build --watch",
"build": "vite build",
"build:check": "node scripts/check-build.js",
"typecheck": "vue-tsc --noEmit",
"prepare": "npm run build"
}
}
```
---
## 对于不同场景的建议
### 场景A当前开发阶段快速验证
**使用方案1提交构建产物**
```bash
# 1. 移除gitignore
# 2. 构建并提交
cd vue-widgets && npm run build && cd ..
git add -f web/comfyui/vue-widgets/
git commit -m "Add Vue widget build output"
```
### 场景B多人协作开发
**使用方案1 + pre-commit hook**
- 提交构建产物保证可用性
- Hook确保开发者不会忘记构建
### 场景C成熟生产项目
**使用方案3GitHub Actions**
- main分支不含构建产物
- CI自动构建并发布到release
- 用户安装release tag
---
## 立即可用的解决方案
### 最简单方案(推荐现在使用):
```bash
# 1. 修改 .gitignore移除构建产物忽略
sed -i '/web\/comfyui\/vue-widgets/d' .gitignore
# 2. 添加源码缓存到gitignore
echo "vue-widgets/node_modules/" >> .gitignore
echo "vue-widgets/.vite/" >> .gitignore
# 3. 确保已构建
cd vue-widgets && npm run build && cd ..
# 4. 提交所有文件
git add .
git commit -m "feat: Add Vue + PrimeVue widget scaffold with demo"
```
这样用户clone后即可直接使用同时开发者在修改Vue代码后需要手动运行 `npm run build`
---
## 未来改进
可以考虑:
1. 添加 Husky + lint-staged 自动化pre-commit
2. 添加 GitHub Actions 自动构建和发布
3. 编写安装后检查脚本
4. 在ComfyUI Manager元数据中说明Node.js依赖如果选择方案2
---
## 总结
| 方案 | 用户体验 | 开发体验 | Git仓库大小 | 实现难度 |
|------|---------|---------|------------|---------|
| 方案1 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| 方案2 | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 方案3 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| 方案4 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
**当前阶段推荐方案1提交构建产物**
**长期推荐方案1 + 方案4 组合(提交产物 + 智能检测)**