纯前端、可静态托管的影视聚合播放器。已移除 Node.js 端依赖与服务端数据库,适配 EdgeOne Pages 等仅托管静态文件的平台。
- 静态导出:
next.config.js使用output: 'export',构建产物输出到out/ - 纯前端数据流:搜索、详情、豆瓣均在浏览器端直接请求第三方源
 - 全站密码:通过 
GlobalPasswordGate在前端拦截(首页/播放/搜索/Admin 等统一一次登录) - 本地持久化:播放记录、收藏、搜索历史、跳片设置、管理员覆盖配置均使用 
localStorage - 代理支持:可在 
config.json配置douban_proxy/downstream_proxy/image_proxy解决 CORS - 已移除广告调用;播放器保留 M3U8 级别的切片过滤
 - 关闭 PWA:为避免与静态导出冲突,已禁用 
next-pwa 
- 安装依赖
 
pnpm install- 配置 
config.json 
{
  "site_name": "MoonTV",
  "homepage_password": "your_password",
  "douban_proxy": "",
  "image_proxy": "",
  "downstream_proxy": "",
  "cache_time": 7200,
  "api_site": {
    "example": {
      "api": "https://example.com/api.php/provide/vod",
      "name": "示例站点",
      "detail": "https://example.com"
    }
  }
}- 启动
 
pnpm gen:runtime && pnpm gen:manifest
pnpm dev首次访问会提示输入首页密码。
pnpm gen:runtime && pnpm gen:manifest && pnpm build说明:
next.config.js已启用output: 'export'- 构建产物位于 
out/(我们也启用了trailingSlash: true以生成目录型路由) - 已禁用 
next-pwa,避免与静态导出冲突 
在 EdgeOne Pages 控制台新建项目并配置:
- 框架预设:Other
 - 根目录:
/ - 输出目录:
out - 安装命令:
pnpm install --frozen-lockfile - 编译命令:
pnpm gen:runtime && pnpm gen:manifest && pnpm build 
注意事项:
- 不要使用 
npx next export -o out(部分环境该参数会报 "unknown option -o") - 构建成功后应看到 
index.html、admin/index.html、search/index.html、play/index.html等文件 - 若第三方接口被 CORS 限制,给 
config.json配置代理前缀: 
{
  "douban_proxy": "https://your-proxy.example.com/fetch?url=",
  "downstream_proxy": "https://your-proxy.example.com/fetch?url=",
  "image_proxy": "https://your-proxy.example.com/image?url="
}- 
方式 A(全站生效,推荐):
- 编辑仓库根目录 
config.json的homepage_password - 运行 
pnpm gen:runtime && pnpm gen:manifest && pnpm build - 推送后在 EdgeOne 重新部署,所有访问使用新密码
 
 - 编辑仓库根目录 
 - 
方式 B(本机临时覆盖):
- 打开站点 
/admin - 点击“修改站点密码”,输入并保存
 - 写入浏览器 
localStorage.moontv_admin_local_config.homepagePasswordOverride,只对当前浏览器生效 - 如需全站同步:在 Admin 点击“导出 JSON”,将内容合并回仓库 
config.json后重新部署 
 - 打开站点 
 
补充:
- 登录状态存于 Cookie 
auth;当config.json或本地覆盖的密码与 Cookie 中不一致时,会强制重新登录 - 想立即重登,可在右上角用户菜单“退出登录”,或清理 
authCookie 
- 构建成功但页面空白/404:
- 确认 
next.config.js已禁用 PWA(本仓库已处理) - 确认 EdgeOne 输出目录是 
out - 确认 
out内存在对应页面的index.html 
 - 确认 
 - 豆瓣/资源搜索失败:
- 多数为 CORS 所致,配置 
douban_proxy/downstream_proxy - 公共代理可能不稳定,建议自建简单转发代理
 
 - 多数为 CORS 所致,配置 
 - 首页没弹密码框:
- 该浏览器已有 
authCookie;先退出登录或清 Cookie,再刷新 
 - 该浏览器已有 
 
config.json:站点配置(首页密码、代理前缀、数据源等)scripts/convert-config.js:构建前将config.json注入到src/lib/runtime.tssrc/components/GlobalPasswordGate.tsx:全站密码门src/lib/douban.client.ts、src/lib/downstream.ts:前端直连第三方数据源,带代理回退next.config.js:静态导出、关闭 PWA、输出目录及图片配置
本项目仅用于技术学习与交流,不提供任何存储与传播影视内容的服务。请遵守当地法律法规,勿将部署的站点对外公开或用于商业用途。