@ctrl/magnet-link

中文文档
5.0.1发布于 2026/10/05MITTypeScriptES Module构建来源已验证近 30 天下载 9713

将磁铁 URI 分析成对象

中文使用文档
文档目录3 节
  1. 安装
  2. 使用
  3. 另见

磁铁连接 npm coverage

将磁铁 URI 分析成对象

港口 网约车/磁铁里 以 恶作剧 在打字符中使用较少的依赖性

演示数字 : https://magnet-link.ep.works.dev 互联网档案馆的存檔,存档日期2013-12-02

安装

npm install @ctrl/magnet-link

使用

解码

import { magnetDecode } from '@ctrl/magnet-link';

const uri =
  'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&dn=Leaves+of+Grass+by+Walt+Whitman.epub&tr=udp%3A%2F%2Ftracker.example4.com%3A80&tr=udp%3A%2F%2Ftracker.example5.com%3A80&tr=udp%3A%2F%2Ftracker.example3.com%3A6969&tr=udp%3A%2F%2Ftracker.example2.com%3A80&tr=udp%3A%2F%2Ftracker.example1.com%3A1337';
const parsed = magnetDecode(uri);
console.log(parsed.dn); // "Leaves of Grass by Walt Whitman.epub"
console.log(parsed.infoHash); // "d2474e86c95b19b8bcfdb92bc12c9d44667cfa36"

整个解析对象

{
  "xt": "urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36",
  "dn": "Leaves of Grass by Walt Whitman.epub",
  "tr": [
    "udp://tracker.example4.com:80",
    "udp://tracker.example5.com:80",
    "udp://tracker.example3.com:6969",
    "udp://tracker.example2.com:80",
    "udp://tracker.example1.com:1337"
  ],
  "name": "Leaves of Grass by Walt Whitman.epub",
  "infoHash": "d2474e86c95b19b8bcfdb92bc12c9d44667cfa36",
  "announce": [
    "udp://tracker.example4.com:80",
    "udp://tracker.example5.com:80",
    "udp://tracker.example3.com:6969",
    "udp://tracker.example2.com:80",
    "udp://tracker.example1.com:1337"
  ]
}

重复的跟踪器,网络种子,和对等地址按照插入顺序被去除.

编码

import { magnetEncode } from '@ctrl/magnet-link';

// convert object to magnet uri
const uri = magnetEncode({
  xt: [
    'urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1',
    'urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY',
    'urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q',
  ],
  xl: '10826029',
  dn: 'mediawiki-1.15.1.tar.gz',
  tr: ['udp://tracker.openbittorrent.com:80/announce'],
  as: 'http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.1.tar.gz',
  xs: ['http://cache.example.org/XRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5', 'dchub://example.org'],
});

也可以使用名称(dn),infoHash(xt),infoHashIntArray(xt),公告(tr),关键词(kt),公钥(xs)和盐(s)等方便键名.

const hybrid = magnetEncode({
  infoHash: '631a31dd0a46257d5078c0dee4e66e26f73e42ac',
  infoHashV2: 'd8dd32ac93357c368556af3ac1d95c9d76bd0dff6fa9833ecdac3d53134efabb',
});

const mutable = magnetEncode({
  publicKey: '8543d3e6115f0f98c944077a4493dcd543e49c739fd998550a1f614ab36ed63e',
  salt: '6e',
});

const selectOnly = magnetEncode({
  infoHash: 'd2474e86c95b19b8bcfdb92bc12c9d44667cfa36',
  so: [0, 2, 4, 6, 7, 8],
});

另见

版本与发布记录

@ctrl/magnet-link 共发布 27 个版本,首次发布于 2019/02/27;过去 12 个月发布了 4 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
5.0.1latest2026/10/051 个月前
5.0.02026/05/185 个月前
4.3.02026/02/178 个月前
4.2.12026/02/178 个月前
4.2.02025/10/011.1 年前
4.1.02025/09/161.1 年前

关于 @ctrl/magnet-link 的常见问题

@ctrl/magnet-link 是什么?

将磁铁 URI 分析成对象

如何安装 @ctrl/magnet-link?

在项目目录运行 npm install @ctrl/magnet-link,或使用 pnpm add / yarn add / bun add。

@ctrl/magnet-link 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@ctrl/magnet-link 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@ctrl/magnet-link 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@ctrl/magnet-link 可以商用吗?

@ctrl/magnet-link 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@ctrl/magnet-link 的下载量有多少?

根据 npm 官方下载统计,@ctrl/magnet-link 在 2026/10/11 – 2026/11/09 这 30 天内被下载 9,713 次,日均约 324 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@ctrl/magnet-link 还在维护吗?

最新版本 5.0.1 发布于 2026/10/05(1 个月前);至今共发布 27 个版本,其中过去 12 个月发布了 4 个;首次发布于 2019/02/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。