桌面软件 活跃维护

pear-desktop

pear-devs/pear-desktop

Pear 🍐 是音乐播放器的扩展

33659
Stars 标星
2005
Forks 分支
179
Watchers 关注
715
Open Issues
TypeScript
主要语言
MIT
开源协议
22.4 MB
仓库大小
3 小时前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:pear-devs/pear-desktop
git clone https://github.com/pear-devs/pear-desktop.git
git clone git@github.com:pear-devs/pear-desktop.git
README.md master

英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。


:pear: 梨子桌面

  • 原生外观与感觉扩展

[!重要]
⚠️ 免责声明

无隶属关系

本项目及其贡献者与 Google LLC、YouTube 或其任何子公司或关联公司没有隶属关系、未获得授权、未得到认可,也没有任何官方联系。这是一个独立的、非营利的、非官方的扩展,由一组志愿者团队开发,旨在提供桌面体验。

商标

“Google”和“YouTube Music”以及相关名称、标记、徽章和图像是各自所有者的注册商标。对这些商标的任何使用仅用于识别和参考目的,并不暗示与商标持有者有任何关联。我们无意侵犯这些商标或对商标持有者造成任何损害。

责任限制

本应用程序(扩展)按“原样”提供,您使用它需自行承担风险。在任何情况下,开发者或贡献者均不对因软件或使用软件或其他与软件相关的事务而产生的任何索赔、损害或其他责任,包括任何法律后果,承担责任。使用本软件的任何及所有结果的责任完全由用户自行承担。

翻译

您可以在 Hosted Weblate 上帮助翻译。

下载

你可以查看最新版本以快速找到最新版本。

Arch Linux

从AUR安装pear-desktop软件包。有关AUR的安装说明,请查看此维基页面。

Solus

sudo eopkg install pear-desktop

macOS

你可以使用 Homebrew 安装该应用(参见 cask 定义):

brew install pear-devs/pear/pear-desktop

如果你手动安装应用程序并在启动应用程序时收到“已损坏,无法打开。”的错误,请在终端中运行以下命令:

/usr/bin/xattr -cr /Applications/Pear\ Desktop.app

窗口

您可以使用 Scoop 包管理器 从 extras 存储库 安装 pear-desktop 软件包。

scoop bucket add extras
scoop install extras/pear-desktop

或者,你可以使用 Winget,这是 Windows 11 的官方 CLI 包管理器,来安装 pear-devs.pear-desktop 包。

注意:由于来源于“未知发布者”,Microsoft Defender SmartScreen 可能会阻止安装。对于手动安装也是如此,当尝试在 GitHub 下载此文件后运行可执行文件(.exe)时也会出现同样的情况。

winget install pear-devs.pear-desktop

如何在没有网络连接的情况下安装?(在 Windows 中)

  • 在版本页面下载适合您设备架构的 *.nsis.7z 文件。
    • 64位 Windows 使用 x64
    • 32位 Windows 使用 ia32
    • ARM64 Windows 使用 arm64
  • 在版本页面下载安装程序。(*-Setup.exe)
  • 将它们放在同一目录中。
  • 运行安装程序。

主题

您可以加载 CSS 文件以更改应用程序的外观(选项 > 外观调整 > 主题)。

一些预定义的主题可在 https://github.com/kerichdev/themes-for-ytmdesktop-player 中获取。

开发

git clone https://github.com/pear-devs/pear-desktop
cd pear-desktop
pnpm install --frozen-lockfile
pnpm dev

您可以选择使用 devcontainers 来替代在系统上安装 pnpm。您可以将 devcontainers 用作 VS Code 中的开发环境,或者作为一种在不在主机系统上安装依赖的情况下轻松构建项目的方法。

请注意,这种方式也有它自身的局限性(例如,GUI 在至少某些 Linux 主机上无法使用)。

构建你自己的插件

使用插件,你可以:

  • 操作应用程序 —— 来自 electron 的 BrowserWindow 会传递给插件处理器
  • 通过操作 HTML/CSS 来更改前端

创建插件

在 src/plugins/YOUR-PLUGIN-NAME 中创建一个文件夹:

  • index.ts:插件的主文件
    
    import style from './style.css?inline'; // import style as inline

import { createPlugin } from '@/utils';

export default createPlugin({
name: 'Plugin Label',
restartNeeded: true, // if value is true, ytmusic show restart dialog
config: {
enabled: false,
}, // your custom config
stylesheets: [style], // your custom style,
menu: async ({ getConfig, setConfig }) => {
// All *Config methods are wrapped Promise
const config = await getConfig();
return [
{
label: 'menu',
submenu: [1, 2, 3].map((value) => ({
label: value ${value},
type: 'radio',
checked: config.value === value,
click() {
setConfig({ value });
},
})),
},
];
},
backend: {
start({ window, ipc }) {
window.maximize();

  // you can communicate with renderer plugin
  ipc.handle('some-event', () => {
    return 'hello';
  });
},
// it fired when config changed
onConfigChange(newConfig) { /* ... */ },
// it fired when plugin disabled
stop(context) { /* ... */ },

},
renderer: {
async start(context) {
console.log(await context.ipc.invoke('some-event'));
},
// Only renderer available hook
onPlayerApiReady(api, context) {
// set plugin config easily
context.setConfig({ myConfig: api.getVolume() });
},
onConfigChange(newConfig) { / ... / },
stop(_context) { / ... / },
},
preload: {
async start({ getConfig }) {
const config = await getConfig();
},
onConfigChange(newConfig) {},
stop(_context) {},
},
});


### 常见用例

- 注入自定义 CSS:在同一文件夹中创建一个 `style.css` 文件,然后:

```typescript
// index.ts
import style from './style.css?inline'; // import style as inline

import { createPlugin } from '@/utils';

export default createPlugin({
  name: 'Plugin Label',
  restartNeeded: true, // if value is true, pear-desktop will show a restart dialog
  config: {
    enabled: false,
  }, // your custom config
  stylesheets: [style], // your custom style
  renderer() {} // define renderer hook
});
  • 如果你想更改 HTML:
import { createPlugin } from '@/utils';

export default createPlugin({
  name: 'Plugin Label',
  restartNeeded: true, // if value is true, ytmusic will show the restart dialog
  config: {
    enabled: false,
  }, // your custom config
  renderer() {
    console.log('hello from renderer');
  } // define renderer hook
});
  • 前端和后端之间的通信:可以使用 Electron 的 ipcMain 模块进行。请参见 index.ts 文件和 sponsorblock 插件中的示例。

构建

  1. 克隆仓库
  2. 按照 这个指南 安装 pnpm
  3. 运行 pnpm install --frozen-lockfile 来安装依赖
  4. 运行 pnpm build:OS
  • pnpm dist:win - Windows
  • pnpm dist:linux - Linux (amd64)
  • pnpm dist:linux:deb-arm64 - Linux(Debian 的 arm64)
  • pnpm dist:linux:rpm-arm64 - Linux(Fedora 的 arm64)
  • pnpm dist:mac - macOS (amd64)
  • pnpm dist:mac:arm64 - macOS (arm64)

使用 electron-builder 为 macOS、Linux 和 Windows 构建应用。

在 devcontainer 中构建

  1. 克隆仓库;
  2. 在 VS Code 中打开文件夹;
  3. 提示时在容器中重新打开;
  4. 按上述方式运行 pnpm build(选择所需的目标);
  5. 从 dist 文件夹收集构建好的文件。

由于 devcontainer 使用了工作区挂载,构建好的文件在主机系统上也可以使用。

生产预览

pnpm start

测试

pnpm test

使用 Playwright 测试应用程序。

许可

MIT © pear-devs

常见问题

为什么应用菜单没有显示?

如果 Hide Menu 选项开启 - 你可以使用 alt 键(或使用 in-app-menu 插件时使用 ` [反引号])显示菜单

本站来源与版权声明
  • 本文标题:pear-desktop - Pear 🍐 是音乐播放器的扩展
  • 本文链接:https://www.cn121.com/desktop/pear-devs-pear-desktop.html
  • 原项目:pear-devs/pear-desktop 版权归原作者 pear-devs 及贡献者所有
  • 收录信息:本站于 2026-10-06 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 pear-devs/pear-desktop。
  • 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出,仅将二级标题译为中文,便于按栏目定位;标题原文可在下方原仓库中查看),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。