# @burdenoff/desktop-shell 中文文档

规范地址：https://npmcn.com/package/%40burdenoff/desktop-shell/

版本：2026\.1107\.1
npm 元数据更新时间：2026-11-07T09:39:26.339Z
中文译文更新时间：2026-11-08T20:14:39.093Z
软件包许可：UNLICENSED

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40burdenoff/desktop-shell
原文对照：https://npmcn.com/package/%40burdenoff/desktop-shell/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：1.3 MB，111 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：1 个
- peer 依赖：electron \>=39 \<45
- 首次发布：2026-08-23T14:35:57.456Z
- 最新版本发布：2026-11-07T09:39:26.151Z
- 近 30 天下载量：8178（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：22（近 12 个月 22 个）

## 中文简介

共享 Electron 主进程 + Burdenoff 产品app shells的预装运行时间(Tray,本地菜单,窗口状态,通知,徽章,主题同步,自动更新 UX,深层链接).

## 安装

```sh
npm install @burdenoff/desktop-shell
```

也可以使用：`pnpm add @burdenoff/desktop-shell`、`yarn add @burdenoff/desktop-shell`、`bun add @burdenoff/desktop-shell`

## README

# @ taffleoff/ desktop- shell (简体中文)

共享 Electron 运行时间和在每个 Burdenoff 桌面应用程序后面构建工具 shell——托盘,本地菜单,窗口状态,通知,徽章,主题同步, 自动更新 UX 和深层链接在一个软件包中,加 `burdenoff-desktop` 国 际 阶段、发射、烟雾测试和核验.

在此包裹之前, ~40 个应用弹壳中每个都携带自己的 30 kB `electron/main.cjs`本身 `scripts/prepare-electron.mjs`,以及它自己的副本 (单位:千美元) `"build"` 块中 `package.json`他们漂了,漂了.

## 此修正的两个错误

**1\. 包装的应用程序未发运 `node_modules`。 。 。 .** `directories.app` 指针 `electron/build/app`,一个舞台脚本文件夹 装入了网页和两个 `.cjs` 文档 - 其它没有。 内部 包裹的灰烬, `require('electron-updater')` 财务报告和审定财务报表 `require('@capgo/electron-updater')` 因此,在启动时就抛出。 两者都是 包起来 `try/catch`,所以每个释放的安装器看起来健康,同时 **自动更新和CapGo OTA无声地死去**。 。 。 .

`burdenoff-desktop stage` 现在 _捆绑_ `electron/main.cjs` 与 `bun build --target=node --format=cjs --external electron`内衬 `@burdenoff/desktop-shell` 财务报告和审定财务报表 `electron-updater`,然后声明输出 包含没有纯更新导入。 CapGo 已经嵌入到已发布中 桌面 shell 捆绑一个拒绝并联的流取器,路径 越狱和超规模的档案。 一个仍然需要的舞台应用 `node_modules` 失败 .

**2\. 沙盒预装不能 `require` 队长Go.** 仅解决预装的沙盒 `electron` 和几块活字 任意 npm `require` 预装是困难的失败,所以制造桥从不 出现。 预装货是用同样的方式捆绑的,并且针对一个明确的 允许列表( e)`electron`, (中文(简体) ), `events`, (中文(简体) ), `timers`, (中文(简体) ), `url`) (中文(简体) ).

两种说法都存在 `stage`,在这个repo's `scripts/verify-bundle.ts`,以及 作为发布工作流程中的"short splated bund"步骤.

第三只更安静的虫子:40发炮弹中有38发 **默认电子图标**, (中文(简体) ), 因为旧舞台剧本已经复制 `build/icon.png` 只有发生 已存在. `stage` 现在明确解决图标 **失败** 当没有 平方 PNG 至少为 512px.

## 安装到 shell 中

四个包装文件,一个配置切片,一个包. json delta:

```
electron/main.cjs             require('@burdenoff/desktop-shell/main').createDesktopApp(require('./desktop.config.cjs'));
electron/preload.cjs          require('@burdenoff/desktop-shell/preload').installPreload(require('./desktop.config.cjs'));
electron/desktop.config.cjs   module.exports = require('../native.config.json').desktop ?? require('../native.config.json');
electron-builder.config.cjs   module.exports = require('@burdenoff/desktop-shell/builder').createElectronBuilderConfig(require('./electron/desktop.config.cjs'));
```

```jsonc
{
  "main": "electron/main.cjs",
  "dependencies": { "@burdenoff/desktop-shell": "<CalVer>" },
  "devDependencies": {
    "electron": "^43.4.1",
    "electron-builder": "^26.0.12",
    "playwright-core": "^1.50.0"   // drives `burdenoff-desktop smoke`
  }
}
```

从外壳中移除: `"build"` 键, `electron-updater`, (中文(简体) ), `@capgo/electron-updater`, (中文(简体) ), `@capacitor-community/electron`, (中文(简体) ), `scripts/prepare-electron.mjs`, (中文(简体) ), `scripts/electron-launch.mjs`, (中文(简体) ), `scripts/electron-before-build.cjs`, (中文(简体) ), `src/electronRuntime.ts`。 。 。 .

分类脚本、模板和每个 `{{TOKEN}}` 发电机 替代品 : [`templates/README.md`](https://npmcn.com/package/%40burdenoff/desktop-shell/templates/README.md)。 。 。 .

校验 `bunx burdenoff-desktop doctor` - 它必须离开0.

## 渲染器表面

制造器被视为不可信:它运行共享的MFE捆绑,在 生产,任何网络捆绑 CAPGO OTA 活动。 它所能达到的:

| 全球 | 目录 |
| --- | --- |
| `window.__burdenoffDesktop` | 桌面桥(`BurdenoffDesktopBridge` 内 `src/shared/types.ts`(中文(简体) ) |
| `window.<product>Electron` | 遗留子集; `legacyGlobal: false` 移除它 |
| `window.electronUpdater` | `notifyAppReady()` 仅限 |

每个 `ipcMain` 输入点检查调用框架是否在应用程序源头上 (或dev服务器)在演艺前. OTA 捆绑选择——下载,激活, 重置、频道和端点变化——只在主要过程中发生 CapGo软件包自有的渲染器API和IPC处理器没有被安装. 这个 渲染器的单个OTA输入是应用准备的信号,两者都 `__burdenoffDesktop.notifyAppReady()` 财务报告和审定财务报表 `electronUpdater.notifyAppReady()` 发送 `IPC.appReady`,而主要进程向 CapGo 推进 运行的捆绑是保存而不是回滚.

### 桌面焦点模式( E)`focusMode: true`(中文(简体) )

有重点会议(TimeCampus)的产品可以打开 `window.__burdenoffDesktop.focus`。显示器,它持有用户的 届会、电话 `focus.setState({ active, sessionId, endsAt, strict, blockedApps, doNotDisturb, trackAppSwitches })` 每隔几秒钟 会话运行;然后主进程:

-   打开操作系统不扰动模式,然后恢复,除非它 是那个打开的 macOS 没有公共焦点 API, 因此运行 两个用户创建的快捷键("焦点打开"/"焦点关闭"); 2; GNOME 应用 `gsettings` (单位:千美元)`show-banners`); Windows 没有支持的 API,所以 状态为 `unsupported` 附有说明;
-   样本前景应用程序(macOS) `osascript` + 系统事件,需要 自动化权限; Windows PowerShell + user32; Linux X11 `xdotool`, (中文(简体) ), Wayland 不支持). 切换到被屏蔽的应用程序会被严格隐藏 课程或对标准课程的警告,并通过 `focus.onBlockedApp`; 与 `trackAppSwitches` 每一个完成的前景 长度报告通过 `focus.onAppSegment`· ;
-   如果渲染器停止刷新5个, 将再次关闭所有设备 几分钟后,一个坠毁或被记录下来的 渲染器从不离开 应用程序隐藏或 通知已变音.

`focus.getStatus()` 编号 : `focus.onStatus()` 报告实际效果 机器(`on`, (中文(简体) ), `needs-setup`, (中文(简体) ), `unsupported`, (中文(简体) ), `error`与人可读 `detail`。所有帮助者都会通过 `execFile` 带有参数数组和 a 超时; 没有渲染器字符串到达外壳或脚本正文 .

### 桌面闲置检测( E)`idleDetection: true`(中文(简体) )

自动捕获(TimeCampus)的产品可打开 `window.__burdenoffDesktop.idle`。渲染器调用 `idle.configure({ enabled, thresholdSeconds })` 使用用户的设置 (阈值被夹到 60.3600秒);然后是主要过程 `powerMonitor.getSystemIdleTime()` (门槛的每个季度,最多 每15秒)并收听屏幕锁定,解锁,暂停并恢复.

每个完成的拉伸 人离开他们的最后键盘或 鼠标输入其之后的第一个输入(或解锁/恢复),是 通过报告 `idle.onIdlePeriod({ startedAt, endedAt, reason })` 与 `reason` `inactive`, (中文(简体) ), `locked` 或者说 `suspended`。伸展比 阈值从未报告, 关闭检测会打开 伸缩. `idle.getStatus()` 编号 : `idle.onStatus()` 报告该人是否 现在,以及这个操作系统是否能够报告输入不活动 (单位:千美元)`supported`) (中文(简体) ). 显示器只读取上次输入后的秒; 它 永远也看不到哪个键被按住或者指针去了哪里.

### 内容安全政策

每个 HTML 文档 `<scheme>://app` 协议服务(内置捆绑, a OTA捆绑,和SPA倒置) 包含两种政策,由 `src/main/csp.ts` 从运行时间配置 :

| 页眉 | 政策 |
| --- | --- |
| `Content-Security-Policy` | `object-src 'none'; base-uri 'none'; frame-ancestors 'self'` |
| `Content-Security-Policy-Report-Only` | 全面目标政策: `'self'`,网关来源(https + wss),SSO来源,以及第三方共享的 MFE 负载(Stripe.js, Razorpay Checkout; 软件包-CDN样式表和字体). 图像和媒体可能来自任何 https 主机 |

仅报告违规情况不会封锁任何东西;主要进程记录每个 独立(`[burdenoff-desktop:<product>:csp]`),所以包件构建没有 DevTools还给他们看。 目标中故意不包含软件包 CDN `script-src`:从中装入的脚本被报告,应当与 应用程序之前 `script-src` 进入强制政策. `frame-ancestors` 实值 `'self'`没有 `'none'`,因此应用程序仍然可以设定自己的文档 `smoke` 命令检查信头和一个同源的iframe.

## CLI 参考

```
burdenoff-desktop <command> [options]
  -h, --help       this help (or `<command> --help`)
  -v, --version    package version
```

### `stage`

构建 `electron/build/app` ——文件夹电子-构建器包. 替换 `scripts/prepare-electron.mjs`。 。 。 .

| 选项 | 默认 | 含义 |
| --- | --- | --- |
| `--root <dir>` | 数据 | 贝壳根 |
| `--env <name>` | `$BURDENOFF_DESKTOP_ENV` | `local` | `alpha` | `prod` (单位:千美元)`staging`编号 :`production` 已接受) |
| `--web-dist <dir>` | `dist` | 要复制的网页构建 |
| `--deps-mode <mode>` | `bundle` | `bundle` 内入每个依赖; `install` 写入 `dependencies` 进入舞台 `package.json` 运行 `bun install --production --ignore-scripts` 里面(有记录的倒地,为真正无法分解的本地模块) |
| `--launch` | 关 | 运行 `launch` 后来 |

它: 读取配置 解析图标( 如果缺少则失败) 擦去 `electron/build/app` \* 复制网页内容 \* 捆绑 `main.cjs` + 键 `preload.cjs` 写道: `electron/runtime-config.json` (单位:千美元) 无依赖性 `package.json` + 阶段图标+应享待遇 + 在macOS上 重命名 dev 副本 `Electron.app` (PlistBuddy + 临时代号) 所以码头 图标和菜单标题是产品的.

### `launch`

`burdenoff-desktop launch [--root <dir>] [--env <name>] [-- <electron args>]`

将本地的Electron在舞台应用上相接而来 每个 `BURDENOFF_DESKTOP_*` 变量( 遗留 `<PREFIX>_ELECTRON_*` 值为 常态化为克能克名先行). 在macOS上,它更喜欢重命名 `electron/build/<ProductName>.app`替换 `scripts/electron-launch.mjs`。 。 。 .

> 命令行没有通过运行时配置参数 : `RUNTIME_ARG_PREFIX` 是主 + 预装通道( URI- encoded JSON by `additionalArguments`, (中文(简体) ), 与 `cfAccess` (被剥去). 主读舞台 `runtime-config.json` 本身, 财务报告和审定财务报表 `BURDENOFF_DESKTOP_*` 超过它.

### `smoke`

`burdenoff-desktop smoke [--root <dir>] [--packaged <dir>] [--timeout <ms>] [--screenshot <path>] [--no-tray] [--allow-missing-driver]`

推出相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相接相相接相接相接相接相接相接相接相接相接相接相接相相接相接相相相相相相相接相相. `electron/dist/linux-unpacked`)通过 `playwright-core`电子驱动器 `BURDENOFF_DESKTOP_SMOKE=1` 并声称:

| 检查 | 请求 |
| --- | --- |
| `window` | 第一个窗口打开 |
| `title` | 等于 `productName` |
| `bridge` | `window.__burdenoffDesktop.product.id` 等于 `product` |
| `diagnostics` | `globalThis.__burdenoffDesktopDiagnostics` 已发布 |
| `protocol` | `protocolRegistered` |
| `menu` | `menu` |
| `tray` | `tray` (轻轻地) `--no-tray` ——无头 CI 没有托盘主机) |
| `deep-link` | `app.emit('open-url', …, '<scheme>://app/smoke')` 到达渲染器 |
| `updater-surface` | `window.electronUpdater` 曝光情况 `notifyAppReady` 没有别的了 |
| `csp` | 应用文档带有强制基线和只报告的政策(退出应用协议) |
| `csp-frame` | 应用程序文档的同源 iframe 还装入 |
| `updater` 编号 : `capgo` 编号 : `webRoot` | 未报告 |

写作 `electron/dist/smoke/window.png` 并打印表格;以非零键退出 关于失败的可读报告。 运行在下面 `xvfb-run` 在 Linux 上。 无 `playwright-core` 其出口为 1 或 0 `--allow-missing-driver`。 。 。 .

### `icons`

`burdenoff-desktop icons [--root <dir>] [--check]`

物质 `electron/build/icons/` (电子建筑师 `buildResources`: `icon.png` 从 `iconSource` → `public/icons/icon-512x512.png` → `public/icons/icon-512.png` → `electron/icon.png` → `build/icon.png`附加时 `entitlements.mac.plist` 从这个包裹. `--check` 只有报告. 电子建设器 `.icns`编号 :`.ico` 从PNG,所以没有图像库 参与.

### `doctor`

`burdenoff-desktop doctor [--root <dir>] [--json]`

只读验证外壳——配置有效性(每个问题都报告,而不是) 只是第一个,薄薄的包装, `electron-builder.config.cjs`,可解的图标, 需要/禁止依赖性、教条脚本、遗留文件 删除 `"build"` 键。 打印表格; `--json` 发射 `{ root, product, ok, checks: [{ id, status, summary, problems }] }` 联 合 国 舰队核查员。 1号出口,任何故障.

预期的软件包. json delta 是从这个软件包读取的 `templates/package-scripts.json`,所以迁移模板和验证人 永远无法漂移.

## 配置合同

`src/shared/types.ts` 是权威的。 外壳的桌面切片 `native.config.json`数字 :

```jsonc
{
  "desktop": {
    "product": "vibecontrols",              // slug: Linux executableName, staged package name
    "productName": "VibeControls",          // window title, tray, installer, artifact names
    "appId": "com.vibecontrols.www",        // NEVER rewrite — updater identity + Windows AUMID
    "capgoAppId": "com.vibecontrols.desktop", // omit to disable CapGo OTA
    "scheme": "vibecontrols",               // deep links + Linux MimeType
    "domain": "vibecontrols.com",           // app origins + update feeds
    "devServerPort": 5200,
    "envPrefix": "VIBE",                    // legacy VIBE_ELECTRON_* fallback ("VIBE_ELECTRON" also accepted)
    "appOrigins": { "prod": "https://admin.burdenoff.com" }, // optional override
    "category": { "mac": "public.app-category.developer-tools", "linux": "Development" },
    "links": { "docs": "…", "support": "…", "status": "…" },
    "window": { "width": 1440, "height": 900, "minWidth": 960, "minHeight": 600 },
    "closeToTray": { "win32": true, "linux": false },
    "iconSource": "public/icons/icon-512x512.png",
    "maintainer": "Name <email>",
    "legacyGlobal": true,
    "focusMode": false,                     // true exposes __burdenoffDesktop.focus (see below)
    "idleDetection": false                  // true exposes __burdenoffDesktop.idle (see below)
  }
}
```

`electron/desktop.config.cjs` 还被接受为来源并优先.

### 环境

每个变量都是 `BURDENOFF_DESKTOP_<KEY>`背负遗产 `<envPrefix>_ELECTRON_<KEY>` 所以没有移动的贝壳和工作流程继续工作:

| 变量 | 效果 |
| --- | --- |
| `ENV` | `local` | `alpha` | `prod` |
| `VERSION` | 卡尔维尔烤入舞台 `package.json` |
| `START_URL` | dev- server 来源于窗口负载 |
| `UPDATE_FEED_URL` | 覆盖生成的电子更新种子 |
| `GLOBAL_BASE_URL` 编号 : `WORKSPACE_BASE_URL` 编号 : `PUBLIC_STORE_BASE_URL` | 网关覆盖 |
| `CF_ACCESS_CLIENT_ID` 编号 : `CF_ACCESS_CLIENT_SECRET` | **只有α** ——被烤入电子更新器可以到达Access-gated alpha下载主机 |
| `DEVTOOLS` | 启动时打开桌面 |

默认来源 `domain`: prod 种子 `https://<domain>/downloads/latest`, (中文(简体) ), 阿尔法种子 `https://alphadownloads.<domain>/downloads/latest`,应用程序来源 `https://app.<domain>` 编号 : `https://alphaapp.<domain>`。 。 。 .

CF 访问证书被烤入 **仅构建α** 拥有一个α 二进制意味着加入团队. 他们从来没有被写成一个专业或本地 建立,而CLI在每一个日志行中都进行编辑.

## 电子建构器配置

`createElectronBuilderConfig(config, overrides?)` 获得整个 配置 。 和旧的手工复制品一样 `"build"` 块 (附录+deb x64, 通用 dmg + zip, NSIS x64, asar,, ), `${productName}-${version}-${arch}.${ext}`),随舰队修正:

-   `directories.buildResources` 实值 `electron/build/icons`, (中文(简体) ), **没有** `build/` —— 说 多个贝壳生成 `build/i18n-bundle.json` 那边;
-   链接 `.desktop` 获得 `MimeType=x-scheme-handler/<scheme>;` - 没有它深 链接在 Linux 上保持沉默;
-   `npmRebuild: false` 替换旧的 `beforeBuild: () => false` 黑客攻击;
-   硬化运行时间, `gatekeeperAssess: false`权利,以及 `notarize: false` ——公证是明示的 `xcrun notarytool` CI步骤如此 苹果的证书上永远没有障碍;
-   没有 `publish` 键:发布工作流程同步到S3本身.

`appId` 通过逐字记录。 贝壳不同(`com.burdenoff.<p>` 对 `com.<p>.www`)并重写每个安装的用户的应用程序数据和 打破更新器.

## 释放流量

`bun run electron:build:<env>` → `burdenoff-desktop stage` - 主张已定 捆 \* `electron-builder --config electron-builder.config.cjs` 签了字 s3 云纹无效.

`templates/workflows/release-electron.yml` 是峡谷管道 (单位:千美元)`workflow_dispatch` 与 `platforms`编号 :`channel`编号 :`version`编号 :`dry_run`编号 :`mark_latest`: (单位:千美元) `validate-inputs` 任务/ 其它工作取决于( CalVer) `version`时,已知 选择值,无秘密),a `capgo-ota` 工作(仅生产 `electron-production`从完整性锁定的CLI `.github/tools/capgo-cli`, (中文(简体) ), `linux` 编号 : `macos` (单位:千美元)`macos-15`) (中文(简体) ) `windows` 构建 任务,以及 a `publish` 任务上传 `downloads/<ver>/<os>/`,镜像 `downloads/latest/<os>/` 带有稳定的未变相别名 自动更新器种子( e)`latest-mac.yml`, (中文(简体) ), `latest.yml`, (中文(简体) ), `latest-linux.yml` 加减 安装器,它们的名字) `downloads/latest/` 其中电子更新器 `generic` 提供者寻找, 写入 `manifest.json` (建造与 `jq`)并作废云花. macOS 标志 `CSC_LINK` 和通过公证工具进行公证/安装; Windows 标志 `azure/artifact-signing-action` (v2.0.0) 接着 **重新计算 `latest.yml` 长沙512/大小**,因为签名会在二进制后重写 电子建构器将其散开,电子更新器将拒绝 下载。 安装为 `--frozen-lockfile`第三方行动以SHA为支柱, 而发送输入仅通过 `env:` 看到了吗 [`templates/README.md`](https://npmcn.com/package/%40burdenoff/desktop-shell/templates/README.md#workflow-invariants)。 。 。 .

`templates/workflows/native-smoke.yml` 是 ~6分钟的路径过滤式 PR 守护 : 安装 / 医生 / 建造 / 阶段 / `electron-builder --dir --linux` → `xvfb-run burdenoff-desktop smoke --packaged` ——截图文物.

## 移徙清单

1.  添加数据 `desktop` 切为 `native.config.json`。 。 。 .
2.  邮票 `electron/main.cjs`, (中文(简体) ), `electron/preload.cjs`, (中文(简体) ), `electron/desktop.config.cjs`, (中文(简体) ), `electron-builder.config.cjs`。 。 。 .
3.  应用 `templates/package-scripts.json` (合并数) `scripts`/deps, 应用 `remove`) (中文(简体) ).
4.  删除 `scripts/prepare-electron.mjs`, (中文(简体) ), `scripts/electron-launch.mjs`, (中文(简体) ), `scripts/electron-before-build.cjs`, (中文(简体) ), `src/electronRuntime.ts`,则 `"build"` 键.
5.  确保 PNG 的正方形存在 :`public/icons/icon-512x512.png`) (中文(简体) ).
6.  印出两个工作流程.
7.  `bun install && bunx burdenoff-desktop doctor` - 必须离开0.
8.  `bun run electron:run:local` ——窗口,托盘,菜单,深链接.
9.  `bunx burdenoff-desktop smoke` (编) `--no-tray` 在无头的Linux.
10.  释放干运行 : `Release Electron` 与 `dry_run=true`。 。 。 .

## 开发此软件包

```bash
bun install
bun run sanity        # lint + format + type:check + test + build
bun run build         # dist/{main,preload,builder,config,cli}.cjs + d.ts
bun run scripts/verify-bundle.ts
```

`test/fixture-shell/` 是用于 `.github/workflows/smoke.yml` 锻炼 `doctor`, (中文(简体) ), `icons`, (中文(简体) ), `stage` 财务报告和审定财务报表 `smoke` 结束而不依赖 在产品回收.

许可证:专有——包德诺夫咨询服务有限公司.

## 常见问题

### @burdenoff/desktop-shell 是什么？

共享 Electron 主进程 \+ Burdenoff 产品app shells的预装运行时间\(Tray,本地菜单,窗口状态,通知,徽章,主题同步,自动更新 UX,深层链接\)\.

### 如何安装 @burdenoff/desktop-shell？

在项目目录运行 npm install @burdenoff/desktop-shell，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：electron（\>=39 \<45）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。它还提供命令行工具 burdenoff-desktop，可以用 npx burdenoff-desktop 直接运行。

### @burdenoff/desktop-shell 支持 TypeScript 吗？

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

### @burdenoff/desktop-shell 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @burdenoff/desktop-shell 需要什么版本的 Node\.js？

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

### @burdenoff/desktop-shell 可以商用吗？

@burdenoff/desktop-shell 使用 UNLICENSED 许可。作者声明为 UNLICENSED，即不授予公开使用许可（与公共领域的 Unlicense 不同）。使用前需获得作者授权。以上为概括，不构成法律意见，请以许可原文为准。

### @burdenoff/desktop-shell 的下载量有多少？

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

### @burdenoff/desktop-shell 还在维护吗？

最新版本 2026\.1107\.1 发布于 2026/11/07（1 天前）；至今共发布 22 个版本，其中过去 12 个月发布了 22 个；首次发布于 2026/08/23。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

