[NMP v3] 文档镜像 旧的 [NMP v2] 已不再维护使用 访问旧文档 打开原始文档
Skip to content

前端框架接入

统一入口

按具体技术栈查找分步教程时,先参阅 NMPv3 集成指南。本页只保留 NMPv3 轻量版在各框架中的接入细节速查。

NMPv3 使用原生 Web Component。多数框架只需导入自动注册入口,在模板或组件中输出 <nmp-player>

播放器自身不依赖 React、Vue、Lit、jQuery 或其他运行时库。

Vite 或普通 TypeScript 项目

ts
import "netease-mini-player-v3/auto";
html
<nmp-player
  playlist-id="14273792576"
  api-base-url="/api/netease"
  theme="auto"
  layout="compact"
></nmp-player>

React

React 可以用 createElement 避免 JSX 类型声明问题:

tsx
import "netease-mini-player-v3/auto";
import { createElement } from "react";

export function NMPv3Player() {
  return createElement("nmp-player", {
    "playlist-id": "14273792576",
    "api-base-url": "/api/netease",
    theme: "auto",
    layout: "compact",
  });
}

直接写 JSX 时,可为项目补充自定义元素类型:

ts
declare namespace JSX {
  interface IntrinsicElements {
    "nmp-player": React.DetailedHTMLProps<
      React.HTMLAttributes<HTMLElement>,
      HTMLElement
    > & {
      "song-id"?: string;
      "playlist-id"?: string;
      "api-base-url"?: string;
      theme?: "auto" | "light" | "dark";
      layout?: "mini" | "compact" | "dock";
    };
  }
}

Vue 3

vue
<script setup lang="ts">
import "netease-mini-player-v3/auto";
</script>

<template>
  <nmp-player
    playlist-id="14273792576"
    api-base-url="/api/netease"
    theme="auto"
    layout="compact"
  />
</template>

如果 Vue 编译器警告未知元素,可以在项目构建配置中把 nmp-player 标记为自定义元素。

Next.js

Next.js 需要在客户端组件中加载播放器:

tsx
"use client";

import { createElement, useEffect } from "react";

export function NMPv3Player() {
  useEffect(() => {
    void import("netease-mini-player-v3/auto");
  }, []);

  return createElement("nmp-player", {
    "playlist-id": "14273792576",
    "api-base-url": "/api/netease",
    theme: "auto",
    layout: "compact",
  });
}

不要在服务端组件中直接访问 window.NMPv3

Nuxt

创建客户端插件:

ts
// plugins/nmpv3.client.ts
import "netease-mini-player-v3/auto";

export default defineNuxtPlugin(() => {});

页面中使用:

vue
<template>
  <nmp-player playlist-id="14273792576" api-base-url="/api/netease" />
</template>

Astro

astro
---
import "netease-mini-player-v3/auto";
---

<nmp-player
  playlist-id="14273792576"
  api-base-url="/api/netease"
  theme="auto"
  layout="compact"
></nmp-player>

Svelte

在浏览器端导入自动注册入口:

svelte
<script lang="ts">
  import { onMount } from "svelte";

  onMount(async () => {
    await import("netease-mini-player-v3/auto");
  });
</script>

<nmp-player playlist-id="14273792576" api-base-url="/api/netease" />

接入检查

接入后检查:

  • 页面中只注册一次 <nmp-player>
  • API 代理可以访问 /song/detail/playlist/track/all/song/url/v1/lyric
  • 单曲和歌单 ID 是字符串形式
  • SSR 框架只在客户端导入播放器自动注册入口
  • 不要为了使用 NMPv3 而安装 NMPv3+ 的适配器包