Skip to content

[错误报告]: 订阅助手(增强版)0.7.1 v3 发布包缺少 frontend/dist 构建产物,组件加载失败 #373

Description

@qsxazcv

确认

  • 我的版本是最新版本,我的版本号与 version 相同。
  • 我已经 issue 中搜索过,确认我的问题没有被提出过。
  • 我已经 Telegram频道 中搜索过,确认我的问题没有被提出过。
  • 我已经修改标题,将标题中的 描述 替换为我遇到的问题。

当前程序版本

v3.0.0

运行环境

Docker

问题类型

插件问题

问题描述

现象

  • MoviePilot v3.0.0(Docker)环境安装 SubscribeAssistantEnhanced 0.7.1 后,插件页面显示「组件加载错误 无法加载组件,请稍后再试」。
  • 根因已定位:插件 get_render_mode() 返回 ("vue", "frontend/dist/assets"),但安装包中 frontend/dist 目录不存在(只有前端源码),前端联邦加载器请求 remoteEntry.js 返回 404。

复现步骤

  1. MoviePilot v3.0.0 环境从插件市场安装 SubscribeAssistantEnhanced 0.7.1(来源 InfinityPacer/MoviePilot-Plugins)。
  2. 打开插件配置页/详情页。
  3. 页面报「组件加载错误 无法加载组件,请稍后再试」。

期望行为

  • 发布包应包含 frontend/dist/assets 构建产物(remoteEntry.js 及其引用的联邦 JS/CSS),插件组件可正常加载。

已定位 / 证据

  • get_render_mode() 返回 ("vue", "frontend/dist/assets")__init__.py)。
  • 运行目录 frontend/ 只有 src/package.jsonvite.config.tsyarn.lock没有 dist/
  • 上游 plugins.v3/subscribeassistantenhanced/ 目录经 GitHub Contents API 确认同样没有 dist
  • release 资产 subscribeassistantenhanced_v0.7.1.zip(92 个条目、329798B)不含任何 dist 条目
  • 上游 plugins.v2/subscribeassistantenhanced/frontend/dist/assets 存在完整构建产物(5 个文件,remoteEntry.js 3429B 等)——v2 代发布带了构建产物,v3 代发布漏了。
  • 前端联邦注册表(/api/v1/plugin/remotes)返回入口 SubscribeAssistantEnhanced -> /plugin/file/subscribeassistantenhanced/frontend/dist/assets/remoteEntry.js,但该文件在安装包中不存在。

已尝试的处理

  • 临时方案:借用 v2 版相同插件的 frontend/dist/assets 产物部署到运行目录后,组件可正常加载(仅绕过,市场更新/重装后会再次失败)。
  • 建议:v3 发布流程补上 frontend/dist 构建产物(构建后再打包发布)。

发生问题时系统日志和配置文件

### Doctor 摘要
状态:healthy
运行环境:Docker
汇总:total=12 error=0 warn=1 advisory=1 fixed=0
关键发现:
- [warn/advisory] 最近日志存在插件异常;来源:autobackup.log, autosignin.log, doubanfolio.log, doubansync.log, downloadsitetagmodnew.log;命中:11 条,去重后 5 条;建议:可使用安全模式启动后检查插件配置。

### 日志筛选依据
策略:time_window_and_keyword_block_match
时间窗口:最近 600 分钟
窗口起点:2026-08-13T18:31:19
关键词:SubscribeAssistantEnhanced、remoteEntry、组件加载
单文件最多保留:80 行
命中文件:
- /config/logs/moviepilot.log;命中关键词:SubscribeAssistantEnhanced、remoteEntry;行数:9
- /config/logs/plugins/subscribeassistantenhanced.log;命中关键词:SubscribeAssistantEnhanced;行数:80
- /config/logs/plugins/systemnotification.log;命中关键词:SubscribeAssistantEnhanced;行数:80

### moviepilot.log
【INFO】2026-08-14 04:24:01,963 - orchestrator.py - Agent工具执行完成: tool=query_installed_plugins, origin=agent_interactive, shadow=True, duration_ms=170, result={"success": true, "query": "订阅助手", "total_installed": 54, "match_count": 1, "truncated": false, "plugins": [{"id": "SubscribeAssistantEnhanced", "plugin_name": "订阅助手(增强版)", "plugin_desc": "多场景管理订阅,实现订阅全生命周期管理。", "plugin_version": "0.7.1", "plugin_author": "InfinityPacer", "installed": true, "has_update": false, "system_version_compatible": true, "system_version": ">=3.0.0", "system_version_message": null, "state": true, "repo_url": "https://github.com/InfinityPacer/MoviePilot-Plugins/", "sour...
【INFO】2026-08-14 04:25:55,339 - plugin.py - 正在停止插件 SubscribeAssistantEnhanced...
【INFO】2026-08-14 04:25:55,344 - plugin.py - 插件 SubscribeAssistantEnhanced 共清除 55 个模块缓存:['app.plugins.subscribeassistantenhanced.engine', 'app.plugins.subscribeassistantenhanced.engine.types', 'app.plugins.subscribeassistantenhanced.shared', 'app.plugins.subscribeassistantenhanced.shared.subscribe', 'app.plugins.subscribeassistantenhanced.shared.media', 'app.plugins.subscribeassistantenhanced.engine.signals', 'app.plugins.subscribeassistantenhanced.shared.log', 'app.plugins.subscribeassistantenhanced.shared.task', 'app.plugins.subscribeassistantenhanced.engine.site', 'app.plugins.subscribeassistantenhanced.shared.config', 'app.plugins.subscribeassistantenhanced.engine.volatility', 'app.plugins.subscribeassistantenhanced.engine.cadence', 'app.plugins.subscribeassistantenhanced.engine.local', 'app.plugins.subscribeassistantenhanced.engine.scope', 'app.plugins.subscribeassistantenhanced.engine.pipeline', 'app.plugins.subscribeassistantenhanced.guard', 'app.plugins.subscribeassistantenhanced.lifecycle.coordinator', 'app.plugins.subscribeassistantenhanced.lifecycle', 'app.plugins.subscribeassistantenhanced.pending', 'app.plugins.subscribeassistantenhanced.engine.proximity', 'app.plugins.subscribeassistantenhanced.shared.update', 'app.plugins.subscribeassistantenhanced.pending.state', 'app.plugins.subscribeassistantenhanced.pending.judge', 'app.plugins.subscribeassistantenhanced.pending.refresh', 'app.plugins.subscribeassistantenhanced.pause', 'app.plugins.subscribeassistantenhanced.pause.airing', 'app.plugins.subscribeassistantenhanced.pause.manager', 'app.plugins.subscribeassistantenhanced.pause.nodownload', 'app.plugins.subscribeassistantenhanced.pause.probe', 'app.plugins.subscribeassistantenhanced.best_version', 'app.plugins.subscribeassistantenhanced.best_version.priority', 'app.plugins.subscribeassistantenhanced.best_version.converter', 'app.plugins.subscribeassistantenhanced.best_version.orchestrator', 'app.plugins.subscribeassistantenhanced.cleanup.subscription', 'app.plugins.subscribeassistantenhanced.cleanup', 'app.plugins.subscribeassistantenhanced.download', 'app.plugins.subscribeassistantenhanced.download.torrent', 'app.plugins.subscribeassistantenhanced.download.monitor', 'app.plugins.subscribeassistantenhanced.download.cleanup', 'app.plugins.subscribeassistantenhanced.recognition.audit', 'app.plugins.subscribeassistantenhanced.recognition.keywords', 'app.plugins.subscribeassistantenhanced.recognition.types', 'app.plugins.subscribeassistantenhanced.recognition.scope', 'app.plugins.subscribeassistantenhanced.recognition.strategy', 'app.plugins.subscribeassistantenhanced.recognition.guard', 'app.plugins.subscribeassistantenhanced.recognition', 'app.plugins.subscribeassistantenhanced.shared.deletes', 'app.plugins.subscribeassistantenhanced.postcheck', 'app.plugins.subscribeassistantenhanced.postcheck.verifier', 'app.plugins.subscribeassistantenhanced.postcheck.rebuilder', 'app.plugins.subscribeassistantenhanced.postcheck.timeout', 'app.plugins.subscribeassistantenhanced.events', 'app.plugins.subscribeassistantenhanced', 'app.plugins.subscribeassistantenhanced.form.components', 'app.plugins.subscribeassistantenhanced.form']
【INFO】2026-08-14 04:25:55,381 - plugin.py - 加载插件:SubscribeAssistantEnhanced 版本:0.7.1
【INFO】2026-08-14 04:25:55,970 - reload_plugin.py - 执行工具: reload_plugin, 参数: plugin_id=SubscribeAssistantEnhanced
【INFO】2026-08-14 04:25:55,970 - orchestrator.py - Agent工具执行完成: tool=reload_plugin, origin=agent_interactive, shadow=True, duration_ms=555, result={"success": true, "plugin_id": "SubscribeAssistantEnhanced", "plugin_name": "订阅助手(增强版)", "plugin_version": "0.7.1", "state": true, "message": "插件已重载,最新配置已生效"}
【INFO】2026-08-14 04:26:16,972 - _terminal_session.py - 启动后台终端会话: session_id=<REDACTED> pid=7998, use_pty=True, command=grep -n "plugin/file\|def file\|FileResponse\|render_mode\|static" /app/app/api/endpoints/plugin.py | head -15 && echo "=== 尝试访问 remoteEntry.js(无认证) ===" && curl -s -o /dev/null -w "HTTP %{http_code}\n" "http://127.0.0.1:3001/api/v1/plugin/file/SubscribeAssistantEnhanced/frontend/dist/assets/remoteEntry.js" ; curl -s -o /dev/null -w "HTTP %{http_code}\n" "http://127.0.0.1:3001/api/v1/plugin/file/SubscribeAssistantEnhanced/remoteEntry.js"
【INFO】2026-08-14 04:26:16,972 - orchestrator.py - Agent工具执行完成: tool=execute_command, origin=agent_interactive, shadow=True, duration_ms=18, result={"session_id": "term_c0990ea3a1ba", "command": "grep -n \"plugin/file\\|def file\\|FileResponse\\|render_mode\\|static\" /app/app/api/endpoints/plugin.py | head -15 && echo \"=== 尝试访问 remoteEntry.js(无认证) ===\" && curl -s -o /dev/null -w \"HTTP %{http_code}\\n\" \"http://127.0.0.1:3001/api/v1/plugin/file/SubscribeAssistantEnhanced/frontend/dist/assets/remoteEntry.js\" ; curl -s -o /dev/null -w \"HTTP %{http_code}\\n\" \"http://127.0.0.1:3001/api/v1/plugin/file/SubscribeAssistantEnhanced/remote...
【INFO】2026-08-14 04:26:22,972 - orchestrator.py - Agent工具执行完成: tool=execute_command, origin=agent_interactive, shadow=True, duration_ms=3, result={"session_id": "term_c0990ea3a1ba", "command": "grep -n \"plugin/file\\|def file\\|FileResponse\\|render_mode\\|static\" /app/app/api/endpoints/plugin.py | head -15 && echo \"=== 尝试访问 remoteEntry.js(无认证) ===\" && curl -s -o /dev/null -w \"HTTP %{http_code}\\n\" \"http://127.0.0.1:3001/api/v1/plugin/file/SubscribeAssistantEnhanced/frontend/dist/assets/remoteEntry.js\" ; curl -s -o /dev/null -w \"HTTP %{http_code}\\n\" \"http://127.0.0.1:3001/api/v1/plugin/file/SubscribeAssistantEnhanced/remote...

### subscribeassistantenhanced.log
【INFO】2026-08-13 23:58:21,826 - subscribeassistantenhanced - 注册定时任务:元数据检查=1h、下载任务检查=15m、洗版订阅检查=cron(*/30 * * * *)、自动纠错=2h、通用巡检=30m
【INFO】2026-08-13 23:58:26,354 - subscribeassistantenhanced - 初始化完成:总开关=True 完成守卫模式=balanced 待定增强=True 暂停优化=True 洗版类型=tv_episode 下载管理=True 完成验证=True 识别增强=balanced 站点集数探测=True 站点完结信号=True 识别增强通知=all 二次识别=balanced_strict 识别增强通知限频=3600 识别增强缓存=100000 识别增强告警=none 通知=True
【INFO】2026-08-13 23:58:26,357 - subscribeassistantenhanced - 注册定时任务:元数据检查=1h、下载任务检查=15m、洗版订阅检查=cron(*/30 * * * *)、自动纠错=2h、通用巡检=30m
【INFO】2026-08-13 23:58:44,907 - subscribeassistantenhanced - 注册定时任务:元数据检查=1h、下载任务检查=15m、洗版订阅检查=cron(*/30 * * * *)、自动纠错=2h、通用巡检=30m
【INFO】2026-08-13 23:58:45,151 - subscribeassistantenhanced - 初始化完成:总开关=True 完成守卫模式=balanced 待定增强=True 暂停优化=True 洗版类型=tv_episode 下载管理=True 完成验证=True 识别增强=balanced 站点集数探测=True 站点完结信号=True 识别增强通知=all 二次识别=balanced_strict 识别增强通知限频=3600 识别增强缓存=100000 识别增强告警=none 通知=True
【INFO】2026-08-13 23:58:53,658 - subscribeassistantenhanced - 注册定时任务:元数据检查=1h、下载任务检查=15m、洗版订阅检查=cron(*/30 * * * *)、自动纠错=2h、通用巡检=30m
【INFO】2026-08-14 00:00:00,140 - subscribeassistantenhanced - 洗版巡检:开始
【INFO】2026-08-14 00:03:30,606 - subscribeassistantenha
...(已截断)

本 Issue 由 MoviePilot Agent 协助用户提交。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions