纯前端、可静态托管的影视聚合播放器。已移除 Node.js 端依赖与服务端数据库,适配 EdgeOne Pages 等仅托管静态文件的平台。
next.config.js 使用 output: 'export',构建产物输出到 out/GlobalPasswordGate 在前端拦截(首页/播放/搜索/Admin 等统一一次登录)localStorageconfig.json 配置 douban_proxy / downstream_proxy / image_proxy 解决 CORSnext-pwapnpm install
config.json{
"site_name": "VIPTV",
"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 控制台新建项目并配置:
/outpnpm install --frozen-lockfilepnpm 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 等文件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_passwordpnpm gen:runtime && pnpm gen:manifest && pnpm build方式 B(本机临时覆盖):
/adminlocalStorage.VIPTV_admin_local_config.homepagePasswordOverride,只对当前浏览器生效config.json 后重新部署补充:
auth;当 config.json 或本地覆盖的密码与 Cookie 中不一致时,会强制重新登录auth Cookienext.config.js 已禁用 PWA(本仓库已处理)outout 内存在对应页面的 index.htmldouban_proxy / downstream_proxyauth Cookie;先退出登录或清 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、输出目录及图片配置本项目仅用于技术学习与交流,不提供任何存储与传播影视内容的服务。请遵守当地法律法规,勿将部署的站点对外公开或用于商业用途。