开发部署
从克隆仓库到打包出安装包,整个流程都在这里。项目完全跑在本地,不需要自己的服务器(除了这个更新站)。
技术栈
萌萌音乐使用以下技术栈开发:
界面层是标准 Vue 3 单页应用,桌面能力(窗口、托盘、更新、开机自启)全部通过 preload 暴露的少量 IPC 完成,渲染进程不直接碰 Node。
环境准备
开始之前,请确保系统已安装:
- Node.js 18 LTS 或更高(低于 18 部分依赖会装不上)
- npm 随 Node.js 一起安装,或使用 pnpm / yarn
- Git 与一个顺手的编辑器(VS Code 最省事)
- Windows 10 / 11 打包目标平台,需要能运行 electron-builder
获取源码
克隆仓库并安装依赖,首次安装大约需要几分钟(Electron 二进制较大):
git clone https://github.com/LHX1925/mm-music-site/
cd mengmeng-music
npm install
国内网络装 Electron 慢的话,可以先设置镜像:npm config set electron_mirror https://npmmirror.com/mirrors/electron/
启动开发服务器
npm run dev
前端热更新由 Vite 负责,Electron 主进程会在窗口加载完成后自动打开。
调试
主窗口内按 F12(或 Ctrl+Shift+I)打开 DevTools;主进程日志直接输出到终端。
本地音乐接口由主进程自动拉起(默认端口 32100 标准版 / 32101 概念版)。如果端口被占用,客户端会提示并在设置里允许改端口。
项目结构
kugou-music/
├── electron/ # 主进程:窗口、托盘、更新、本地接口
│ ├── main.cjs # 入口与全部 IPC
│ └── updater.cjs # 检查更新 / 下载 / 覆盖安装
├── public/ # 图标与静态资源
├── src/
│ ├── api/ # 接口封装(搜索、歌单、歌词、MV)
│ ├── components/ # 播放条、歌词、弹窗等组件
│ ├── composables/ # 主题同步等组合式函数
│ ├── stores/ # Pinia:player / user / settings / update
│ ├── utils/ # 歌曲标记、设备号、歌词存储
│ ├── views/ # 页面(首页 / 搜索 / 歌单 / 设置)
│ ├── App.vue
│ └── main.js
├── package.json
└── vite.config.js
构建应用
打包前先构建前端产物,再用 electron-builder 生成安装包:
npx vite build
npx electron-builder --win
产物输出到 out_build 目录,安装版与便携版各一个 exe。
打包前请先退出正在运行的客户端,否则 app.asar 会被占用导致写入失败。
数据接口
歌单、搜索、播放地址等数据全部来自本地运行的 KuGouMusicApi。项目会同时拉起标准版与概念版两个实例,互不干扰。
更新服务
这个官网同时是更新服务器。客户端启动后请求一次 /api.php?action=check,发现新版本就弹出更新窗;发新版只需在后台填版本号、上传 exe。
贡献代码
欢迎任何形式的参与:报 bug、提需求、改文案、翻译,或者直接提交代码。
- Fork 仓库并克隆到本地
- 新建功能分支:
git checkout -b feature/xxx - 提交改动并推送到你的分支
- 发起 Pull Request,说明改动内容与验证方式
代码规范
保持与现有代码一致的风格:两空格缩进、单引号、组件用 Composition API。提交前请自行构建一次确认不报错。
常见问题
端口被占用怎么办?
默认使用 32100 / 32101。可在设置里改成其它端口,或先关掉占用端口的进程。
打包提示文件被占用?
退出正在运行的萌萌音乐(含托盘图标),再重新执行打包命令。
为什么搜不到歌?
检查本地接口是否已启动、设备号是否申请成功;概念版接口偶发风控,重启客户端即可重新申请。