unlock-music项目安装依赖及启动相关报错问题及解决

今晚翻倒一起的音乐解锁相关项目源码,于是进行启动测试,发现原本项目作者仓库已经删除了,随后用ai重构

依赖无法下载问题总结与修复记录

项目地址:https://gitee.com/suifenglzy/unlock-music

问题描述

unlock-music 项目(v1.10.0)在 npm install 时因以下两个依赖包已从 npm 官方仓库永久删除而安装失败:

依赖包 版本 用途
@jixun/qmc2-crypto 0.0.6-R1 QMC2 格式(QQ 音乐新格式 .mgg/.mflac)的 WASM 加解密
@unlock-music/joox-crypto 0.0.1-R5 JOOX Music 海外版格式解密

两个包无论在 registry.npmjs.org 还是 registry.npmmirror.com 均返回 404,无法安装,导致项目完全无法运行

解决思路

参考同级目录下已能正常运行的 音乐解锁dist/dist(v1.8.0)已构建代码,发现其完全不依赖这两个包,而是使用纯 JS 实现的 QmcDecoder 处理 QMC 格式解密。因此核心策略是:

  1. 移除已删除的 npm 依赖

  2. 用纯 JS 降级方案替代 qmc_wasm.ts 的 WASM 解密

  3. 禁用 JOOX 解密(无可用替代方案)

  4. 修复 TypeScript 编译错误

修改文件清单

文件 修改内容
package.json 移除 @jixun/qmc2-crypto 和 @unlock-music/joox-crypto
src/decrypt/qmc_wasm.ts 重写为始终返回失败,自动触发 qmc.ts 中纯 JS QmcDecoder fallback
src/decrypt/joox.ts 重写为抛出友好错误提示,移除所有已删除包的 import
src/decrypt/index.ts 修正 JooxDecrypt() 调用,移除传入的参数
src/shims-element-ui.d.ts 新增,解决 element-ui 缺少类型声明的 TS 编译错误
package-lock.json 删除旧 lockfile,重新生成以排除已删除包的记录
README.md 补充安装注意事项和已知问题说明

具体修改详情

1. package.json --- 移除依赖

复制代码
  "dependencies": {
    "@babel/preset-typescript": "^7.16.5",
-   "@jixun/qmc2-crypto": "^0.0.6-R1",
-   "@unlock-music/joox-crypto": "^0.0.1-R5",
    "base64-js": "^1.5.1",
    ...
  }

2. src/decrypt/qmc_wasm.ts --- 改为 fallback

原文件导入并调用 @jixun/qmc2-crypto 的 WASM 模块进行 QMC2 检测和解密(约111行)

修改后:

复制代码
export async function DecryptQMCWasm(): Promise<QMC2DecryptionResult> {
  return {
    success: false,
    data: new Uint8Array(),
    songId: 0,
    error: 'QMC2 WASM 解密不可用(@jixun/qmc2-crypto 已删除),将自动使用 JS 解码器',
  };
}

由于 qmc.ts 中已有完整的 fallback 逻辑(v2Decrypted.success 为 false 时自动使用 QmcDecoder),此改动无需修改 qmc.ts 主体逻辑

3. src/decrypt/joox.ts --- 禁用 JOOX

JOOX 解密没有可用的纯 JS 替代方案,改为抛出明确错误:

复制代码
export async function Decrypt(): Promise<DecryptResult> {
  throw new Error('@unlock-music/joox-crypto 包已从 npm 删除,JOOX 解密功能暂时不可用。');
}

4. src/decrypt/index.ts --- 修正调用

复制代码
   case 'ofl_en':
-     rt_data = await JooxDecrypt(file.raw, raw.name, raw.ext);
+     rt_data = await JooxDecrypt();
      break;

5. src/shims-element-ui.d.ts --- 新增类型声明

element-ui 的 @types/element-ui 包不存在,创建 shim 文件解决 TS 编译错误 TS7016:

复制代码
declare module 'element-ui';

6. 删除 package-lock.json

旧 lockfile 中仍记录了已删除的两个包,删除后重新生成干净的 lockfile

功能影响

功能 修复前 修复后
QMC 旧格式(.qmc0/.qmc2/.qmc3) ✅ ✅
QMC 新格式(.mgg/.mflac)WASM 加速 ✅ ⚠️ 降级为 JS 解码(稍慢但仍可用)
网易云音乐 .ncm ✅ ✅
虾米音乐 .xm ✅ ✅
酷我音乐 .kwm ✅ ✅
酷狗音乐 .kgm/.vpr ✅ ✅
JOOX Music .ofl_en ✅ ❌ 已不可用(无替代方案)

安装与运行

复制代码
# 使用 npmmirror 镜像源(推荐,国内网络更快)
npm config set registry https://registry.npmmirror.com
npm install --ignore-scripts
​
# 开发运行
npm run serve
​
# 构建生产版本
npm run build

时间线

  • 问题发现 :npm install 时报 E404,两个包均不可用

  • 对比分析 :参考 音乐解锁dist 的 dist 构建产物,确认纯 JS 方案可行

  • 代码修改:移除依赖 + 重写 3 个源文件 + 新增 1 个类型声明文件

  • 验证 :npm install ✅ + npm run build ✅

相关推荐
辣知4 小时前
辣知·化智93 被历史尘封的鬻子
学习
每天题库5 小时前
西藏安全员 A 证备考真题题库 强化重点知识刷题提升通过率
学习·安全·考试·题库·考证
Be for thing6 小时前
PyTorch基础|Tensor张量详解,张量创建、数据类型与常用操作
pytorch·学习·1024程序员节
前进的李工6 小时前
Agent 学习笔记 02:Harness 与工作流怎么理解
笔记·学习·agent·工作流·harness
m4Rk_7 小时前
【论文阅读】Agent记忆机制(114):MemoryTax——当 Agent 能自主搜索历史,专门的记忆系统还划算吗?
论文阅读·人工智能·学习·开源·github
程序员梅雨9 小时前
【从零开始学习数据仓库 | 第一篇】:维度建模理论
大数据·数据仓库·学习·阿里云·数据分析
keyipatience10 小时前
Git学习(4)Git分布式优势与实战配置全解析
git·学习
comyccccc12 小时前
STM32F407VET6核心板的部分电路绘制学习笔记
笔记·stm32·学习
叼烟扛炮13 小时前
Linux 学习笔记(三十六):并发进阶——读写锁 vs 自旋锁,到底怎么选?
linux·运维·服务器·笔记·学习
是隼人13 小时前
buuctf-pwn [极客大挑战 2019]Not Bad(orw+jmp)题解(学习过程持续更新)
学习·安全·pwn入门·ctf入门