Files
ComfyUI-Lora-Manager/BUILD_WORKFLOW_IMPLEMENTATION.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

398 lines
8.9 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 构建流程实施方案
## 已实施方案方案1 + 方案4 组合
我们采用了**提交构建产物 + 智能检测**的混合方案,同时满足用户便利性和开发灵活性。
---
## 🎯 方案特点
### 对于用户
**安装即用** - Clone仓库后无需任何构建步骤
**无需Node.js** - 构建产物已包含在仓库中
**快速启动** - ComfyUI启动时无延迟
### 对于开发者
**自动检测** - 源代码变更后自动检测是否需要重新构建
**自动构建** - 如果检测到需要可自动执行构建需要Node.js
**灵活配置** - 可选择手动或自动构建模式
---
## 📦 实施的组件
### 1. Git 配置调整
**文件**: `.gitignore`
```diff
- # Vue widgets build output
- web/comfyui/vue-widgets/
+ # Vue widgets development cache (but keep build output)
+ vue-widgets/node_modules/
+ vue-widgets/.vite/
+ vue-widgets/dist/
```
**说明**:
- ✅ 构建产物 `web/comfyui/vue-widgets/` **提交到Git**
- ✅ 开发缓存node_modules等被忽略
- ✅ 仓库大小增加约 1.4MB(可接受)
---
### 2. 智能构建检测模块
**文件**: `py/vue_widget_builder.py`
**核心功能**:
- ✅ 检查构建产物是否存在
- ✅ 检查源代码是否比构建新(开发模式)
- ✅ 检查Node.js/npm是否可用
- ✅ 自动执行构建(如果需要且可行)
- ✅ 友好的错误提示和日志
**主要类和方法**:
```python
class VueWidgetBuilder:
def check_build_exists() -> bool
"""检查构建产物是否存在"""
def check_build_outdated() -> bool
"""检查源代码是否比构建新"""
def check_node_available() -> bool
"""检查Node.js是否可用"""
def build_widgets(force=False) -> bool
"""执行构建"""
def ensure_built(auto_build=True, warn_only=True) -> bool
"""确保构建存在,智能处理"""
```
**便捷函数**:
```python
check_and_build_vue_widgets(auto_build=True, warn_only=True, force=False)
```
---
### 3. 启动时自动检测
**文件**: `__init__.py`
在ComfyUI加载插件时自动检测并构建
```python
# Check and build Vue widgets if needed (development mode)
try:
from .py.vue_widget_builder import check_and_build_vue_widgets
# Auto-build in development, warn only if fails
check_and_build_vue_widgets(auto_build=True, warn_only=True)
except Exception as e:
logging.warning(f"[LoRA Manager] Vue widget build check skipped: {e}")
```
**行为**:
- ✅ 如果构建产物存在且最新 → 静默通过
- ✅ 如果构建产物缺失/过期 → 尝试自动构建需Node.js
- ✅ 如果构建失败 → 警告但不阻止ComfyUI启动
- ✅ 开发模式下源代码变更后自动重建
---
### 4. 增强的构建脚本
**文件**: `vue-widgets/package.json`
```json
{
"scripts": {
"dev": "vite build --watch",
"build": "vite build",
"build:production": "vite build --mode production",
"typecheck": "vue-tsc --noEmit",
"clean": "rm -rf ../web/comfyui/vue-widgets",
"rebuild": "npm run clean && npm run build",
"prepare": "npm run build"
}
}
```
**新增脚本**:
- `clean` - 清理构建产物
- `rebuild` - 完全重建
- `build:production` - 生产模式构建
- `prepare` - npm install后自动构建可选
---
### 5. Pre-commit Hook 示例
**文件**: `vue-widgets/pre-commit.example`
提供了Git pre-commit hook示例确保提交前构建
```bash
#!/bin/sh
cd vue-widgets && npm run build && git add web/comfyui/vue-widgets/
```
**使用方法**:
```bash
# 手动安装(简单方法)
cp vue-widgets/pre-commit.example .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
# 或使用Husky推荐用于团队
npm install --save-dev husky
npx husky install
npx husky add .git/hooks/pre-commit "cd vue-widgets && npm run build"
```
---
## 🔄 工作流程
### 场景A: 用户安装
```bash
# 1. 用户clone仓库
git clone <repo-url>
cd ComfyUI-Lora-Manager
# 2. 启动ComfyUI无需任何构建步骤
# 构建产物已在仓库中,直接可用
```
**结果**: ✅ 即装即用无需Node.js
---
### 场景B: 开发者修改Vue代码
**方式1: 手动构建**
```bash
cd vue-widgets
npm run build
# 修改会被检测到ComfyUI重启时会看到最新版本
```
**方式2: 监听模式**
```bash
cd vue-widgets
npm run dev # Watch mode自动重建
# 浏览器刷新即可看到变化
```
**方式3: 自动检测**
```bash
# 修改Vue源代码
vim vue-widgets/src/components/DemoWidget.vue
# 重启ComfyUI
# __init__.py会检测到源代码比构建新自动重建如果有Node.js
```
---
### 场景C: 提交代码
**如果安装了pre-commit hook**:
```bash
git commit -m "Update widget"
# Hook自动执行构建
# 构建产物自动添加到commit
```
**如果没有hook手动**:
```bash
cd vue-widgets && npm run build && cd ..
git add .
git commit -m "Update widget and build output"
```
---
### 场景D: CI/CD 发布
```bash
# 在GitHub Actions或其他CI中
cd vue-widgets
npm install
npm run build
# 构建产物自动包含在release中
```
---
## 📊 测试结果
已测试以下场景,全部通过:
### ✅ Test 1: 构建产物存在时
```
Result: True (静默通过,无日志)
```
### ✅ Test 2: 构建产物缺失时
```
自动检测 → 自动npm install → 自动build → 成功
Result: True
Build created: web/comfyui/vue-widgets/demo-widget.js (418K)
```
### ✅ Test 3: 源代码变更检测
```
修改.vue文件 → 时间戳检测 → 自动重建
Result: True
```
---
## 📁 Git 仓库状态
### 应该提交的文件:
```
✅ vue-widgets/src/**/*.{ts,vue} # 源代码
✅ vue-widgets/package.json # 依赖配置
✅ vue-widgets/package-lock.json # 锁定版本
✅ vue-widgets/vite.config.mts # 构建配置
✅ vue-widgets/tsconfig.json # TS配置
✅ vue-widgets/*.md # 文档
✅ web/comfyui/vue-widgets/**/*.js # 构建产物 ⭐
✅ web/comfyui/vue-widgets/**/*.css # 构建CSS ⭐
✅ web/comfyui/vue-widgets/**/*.map # Source maps ⭐
✅ py/vue_widget_builder.py # 构建检测模块 ⭐
```
### 应该忽略的文件:
```
❌ vue-widgets/node_modules/ # npm依赖
❌ vue-widgets/.vite/ # Vite缓存
❌ vue-widgets/dist/ # Vite临时目录
```
---
## 🎓 开发者指南
### 首次设置
```bash
cd vue-widgets
npm install
npm run build
```
### 日常开发
```bash
# 开发模式(推荐)
cd vue-widgets
npm run dev
# 在另一个终端启动ComfyUI修改后刷新浏览器
# 或者依赖自动检测
# 修改代码 → 重启ComfyUI → 自动重建
```
### 提交前
```bash
# 确保构建最新
cd vue-widgets && npm run build && cd ..
# 或者安装pre-commit hook自动化
cp vue-widgets/pre-commit.example .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
```
---
## 🔧 故障排除
### 问题1: 构建产物不是最新的
**症状**: 修改了Vue代码但ComfyUI中看不到变化
**解决方案**:
```bash
cd vue-widgets
npm run rebuild # 强制重建
# 然后刷新浏览器
```
### 问题2: 自动构建失败
**症状**: ComfyUI启动时显示构建失败警告
**检查**:
```bash
# 检查Node.js是否安装
node --version
npm --version
# 手动测试构建
cd vue-widgets
npm install
npm run build
```
### 问题3: Git显示大量构建产物变更
**这是正常的** - 构建产物应该提交
**最小化变更**:
- 使用 `npm run build` 而非 `npm run dev`watch模式
- 确保vite配置中 `minify: false`(已配置)
- 只在需要时重新构建
---
## 📈 优势总结
| 方面 | 优势 |
|------|------|
| 用户体验 | ⭐⭐⭐⭐⭐ 安装即用 |
| 开发体验 | ⭐⭐⭐⭐⭐ 自动检测+构建 |
| 可靠性 | ⭐⭐⭐⭐⭐ 构建产物已验证 |
| 灵活性 | ⭐⭐⭐⭐ 支持多种工作流 |
| 维护性 | ⭐⭐⭐⭐ 清晰的构建流程 |
| Git仓库 | ⭐⭐⭐ 略大但可接受 |
---
## 🚀 未来优化(可选)
1. **添加Husky** - 自动化pre-commit hooks
2. **GitHub Actions** - CI自动构建和测试
3. **构建缓存** - 加速CI构建
4. **Minification** - 生产模式压缩代码(减小体积)
5. **代码分割** - 按需加载不同widget
---
## 总结
当前实施的方案完美平衡了用户便利性和开发灵活性:
-**用户**: Clone后即用无需Node.js
-**开发者**: 自动检测和构建,开发流畅
-**可靠性**: 构建产物已验证提交
-**可维护性**: 清晰的构建流程和文档
用户安装时,`web/comfyui/vue-widgets/`中的JS代码**始终是由vue-widgets中的最新代码编译得到的**,因为:
1. 开发者提交前会构建手动或通过hook
2. ComfyUI启动时会检测并自动重建开发模式
3. 构建产物已包含在Git仓库中用户直接获得
这个方案已经过测试验证,可以投入生产使用。