# @computesdk/givemeanode 中文文档

规范地址：https://npmcn.com/package/%40computesdk/givemeanode/

版本：1\.2\.16
npm 元数据更新时间：2026-11-07T03:29:59.138Z
中文译文更新时间：2026-11-10T14:50:40.341Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40computesdk/givemeanode
原文对照：https://npmcn.com/package/%40computesdk/givemeanode/?lang=original
项目主页：https://givemeanode.com/
源码仓库：https://github.com/computesdk/computesdk

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

- 包体积（解压后）：366 kB，9 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-09-03T13:15:21.364Z
- 最新版本发布：2026-11-07T03:29:58.830Z
- 近 30 天下载量：8569（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：22（近 12 个月 22 个）

## 中文简介

givemeode for ComputeSDK - 从每个区域暖水池提供沙盒, 并有签名证书, 使数据库远离创建路径

## 安装

```sh
npm install @computesdk/givemeanode
```

也可以使用：`pnpm add @computesdk/givemeanode`、`yarn add @computesdk/givemeanode`、`bun add @computesdk/givemeanode`

## README

# @ computesdk/ givememode (英语)

[给定](https://givemeanode.com/) 计算SDK的提供者。 这么快 微VM沙盒.

## 安装和设置

```bash
npm install @computesdk/givemeanode
```

把它装入一个 `.env` 文档。 任何管家都可以用薄荷薄荷 [团队](https://givemeanode.com/team) 或 CLI; 显示一次.

```bash
gman token create --name computesdk --workspace my-workspace
# prints GMN_TOKEN=gmnt_... once
```

```bash
GMN_TOKEN=gmnt_your_token
# Optional. Defaults to us-west-2. givemeanode runs an endpoint per region
# and they are not interchangeable for latency, so set this to the one
# nearest your workload.
GMN_API_HOST=https://api.use1.givemeanode.com
```

## 使用量

```typescript
import { givemeanode } from '@computesdk/givemeanode'

const compute = givemeanode({ apiKey: process.env.GMN_TOKEN })

const sandbox = await compute.instances.create()
const result = await sandbox.runCommand('node -v')
console.log(result.stdout) // v24.19.0
await sandbox.destroy()
```

## 配置

| 选项 | 类型 | 默认 | 它会做什么 |
| --- | --- | --- | --- |
| `apiKey` | `string` | `GMN_TOKEN` | 这个 `gmnt_` org 服务标志. |
| `baseUrl` | `string` | `GMN_API_HOST`,则 `https://api.givemeanode.com` | 使用哪个区域终点. |
| `fastToken` | `'absorb' | 'prime' | 'off'` | `'absorb'` | 见下文. |
| `transport` | `'auto' | 'http2' | 'fetch'` | `'auto'` | 每次请求都有一个HTTP/2会话,或 `fetch`。参见"一个连接一个破裂". |
| `warm` | `'connect' | 'prime' | 'off'` | `'connect'` | 建筑与连接有什么关系. 见"一脉相通一脉相通". |
| `connectTimeout` | `number` | `10000` | HTTP/2会话的开幕时间,以毫秒计. |
| `ramGib` | `number` | 2个 | 宾客记忆. `memoryMiB` 编号 : `memMiB` 打开 `create` 也读取并四舍五入到整个GiB; `memory` 按共享选项是十进制 MB. |
| `egress` | `'open' | 'none'` | 账户默认 | 来宾能否到网. 宾客图像准备后固定, 不是每个命令 . |
| `execRetries` | `number` | 1个 | 见"两种值得了解的行为". |
| `timeout` | `number` | 120 000 个 | 请求超时,以毫秒计. |

## 要求多个核心

沙盒默认是一个vCPU. `create` 在其中任何一项下取一个 vCPU 计数 计算 SDK 的拼写( S)`vcpus`, (中文(简体) ), `cpus`, (中文(简体) ), `resources.vcpus`)它被绘制 打开 **最小数** 符合两个维度的已命名实例类型:

```typescript
// 8 vCPU / 32 GiB (sandbox-lg)
const sandbox = await compute.instances.create({ vcpus: 8, memory: 16384 })

// ...or name the size outright, which wins over the hints
const xl = await compute.instances.create({ size: 'sandbox-xl' })
```

| 大小 | 五氯联苯 | 内存 | 记为 |
| --- | --- | --- | --- |
| `sandbox-sm` (默认) | 1个 | 2个GiB | 2个GiB |
| `sandbox-md` | 页:1 | 8个GIB | 16 吉贝 |
| `sandbox-lg` | 第8条 | 32个GIB | 32个GIB |
| `sandbox-xl` | 16个 | 64 吉贝 | 64 吉贝 |

要求8个VCPU 8-vCPU外形,从来没有16-vCPU. 一个通过范围夹顶的询问 改为 `sandbox-xl` 让门拒绝它 并留言命名你自己 天花板,而不是扔 不太有用的地方.

**默认值以上的大小是每个工作空间的选入.** 一个新的工作空间 `sandbox_vcpus` 上限为4个,上限为4个 `sandbox_ram_gib` 上限是8,所以 `sandbox-lg` 财务报告和审定财务报表 `sandbox-xl` 被拒绝,直到一个兽人管理者 提高两者。 这个 拒绝指定限制和如何提高限制, 并且此提供者显示 信息逐字记录.

一个命名大小和 `ramGib` 彼此排斥,因为大小已经 修正两个维度。 仅存请求保留 `ramGib`,所以希望6个GiB上 一个核心得到的正是 而不是被围成一个形状 你会 {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}多收点钱.

## 容器图像

通过消化传递任何容器图像,并给定模式运行:

```typescript
const sandbox = await compute.instances.create({
  image: 'ghcr.io/acme/task@sha256:abc...',
})
```

或准备一次,然后从它开始许多沙盒,这要快得多 每个沙盒 :

```typescript
const template = await compute.template.create({
  image: 'ghcr.io/acme/task@sha256:abc...',
})
const a = await compute.instances.create({ templateId: template.id })
const b = await compute.instances.create({ templateId: template.id })
```

三事须知:

-   **参考内容必须基于文摘.** `ghcr.io/acme/task:latest` 实值 拒绝; `ghcr.io/acme/task@sha256:<64 hex>` 已接受。 标签可以是 移动到不同字节的指向,准备的图像被缓存到下面 图像的身份,所以一个标记 最终将启动一个沙盒从 内容不再回答该名称。 阅读摘要 `docker buildx imagetools inspect <ref>` 或者说 `crane digest <ref>`。 。 。 .
-   **将注册主机全文写入 .** `alpine@sha256:...` 被拒绝 因为它没有说要认证给哪个登记处.
-   **新图像的第一个沙盒很慢**,因为图像必须 在一切开始之前,要做好准备;每一次都快。 使用 `template.create` 当你知道图像在前面。 提供者准备 给定的图像每个进程只共享一次结果, 因此开始 N 一个图像的沙盒不准备它N时间.

gimentmeanode自己的被整理的相片也可用名取出(`sbx-base`, (中文(简体) ), 默认,有蟒蛇3、节点24、克特、卷曲和一个编译器; `sbx-min` 财务报告和审定财务报表 `sbx-task` 比较小). 任何包含 `@sha256:` 被视为 容器图像; 其它任何东西均作为拼接名称处理.

## 签名的证书, 为什么你免费得到它

认证请求需要一次显示签名的来回旅行 证书没有。 给一个手 回到任何回应 请求与您的 `gmnt_` 符号 :

```
gmn-fast-token:         gmns_<compact JWT>
gmn-fast-token-expires: 2026-08-30T19:48:19Z
```

这个包吸收了报价并自动呈现出来. 有一个 **无配置,无新库,无外出往返**数字 : 价钱是按你已经得到的答复 和你的 `gmnt_` 信物是你们唯一的秘密 每一次失败都会回到 普通的证书,所以不能使用的证书 永远不会更糟 而不是没有.

三种模式,因为正确的模式取决于您的形状:

-   **`absorb`** (默认)从不增加回程. 你的第一个要求已经满足了 普通成本,它的反应 带有证书,和一切 更便宜的 包括紧接着命令 首先创建.
-   **`prime`** 先付一个请求 单飞过每一个 呼唤者分享信使,所以即使第一个创造出一个破裂的礼物 证书。 是一个 `GET /preview/sandboxes` 第一次选举之前 创建,列表中的十字符将输入数据库: 东门.
-   **`off`** 从不给一个.

```typescript
const compute = givemeanode({
  apiKey: process.env.GMN_TOKEN,
  fastToken: 'prime', // pay the warm-up before the first burst
})
```

默认是 `absorb` 通过1.0.x, `prime` 在1.1.x中,并且为 `absorb` 再次从1.2.0. `prime` 是在2026-09-09上对着一个门测量的 读取其数据库以验证一个 `gmnt_` 符号,所以100个寒冷创建队列 其中100个读取(约600毫秒为767毫秒所创造). 那天晚些时候 门开始回答 a `gmnt_` 它的纪念品的复制品 表格和读数停止计算任何费用,而质数继续计算 其清单:2026-09-18年从我们东-东-1测得的100分 创建一个 HTTP/2 会话,中位点对交互时间改为 56 到 106米,没有质地对166米等待一个.

所花费的,明白无误地说:签名的证书对自己有效 不管后面的标志发生了什么 `gman token revoke` 停止任何东西 **新设** 立刻,但证书已经 客户端的手一直工作到到期. 禁令的行为也一样.

## 一个连接一个破裂

在节点上,这个提供商向门讲HTTP/2:每个提供商一个会话, 每一个请求其中的流, 当提供者构建时打开 握手是在你准备的时候付的 测量数据 我们东一站对着我们东一门, 100个同时创建的,当时命令 配对 :

| 有线 | TTI 中位数 | 第95页 | 第99页 |
| --- | --- | --- | --- |
| `fetch`,每个飞行请求连接一次 | 211分钟 | 315分钟 | 338 分钟 |
| 1个 HTTP/2 会话 | 40分钟 | 44分钟 | 45分钟 |

门是用大约1ms来回答的 区别在于客户端: `fetch` 每个飞行中请求打开一个 TLS 连接, 单行 跑步时间 接接接接接接地握手 中位数 创作等待着170毫秒左右的转弯 才有字节到达大门.

`fetch` 保持为后退 `node:http2` 无法获取 (浏览器,边缘运行时间)或会话无法打开,它是什么 已注射 `fetch` 选择。 设定 `transport: 'fetch'` 永远不要开会, 或者说 `transport: 'http2'` 用它来对抗一个纯文本回回回 dev 服务器 (h2c) (中文(简体) ).

建筑不会在会话上发出任何信号: 您的符号首先离开 进程。 设定 `warm: 'prime'` 支付签名 证书的热身在建筑, 所以即使是第一个创造的爆破 送给你,或者 `warm: 'off'` 在第一次请求之前不打开任何东西。 闲会话不保留节点 进程为活,所以一个脚本可以发出请求,并随即返回 结束了 `fetch`。其连接从未完成的请求在 拥有 `timeout`,并且连接需要比 `connectTimeout` 放弃了 放弃了 `fetch` 从那时起回答. 那扇窗是一个证书的一生,不再存在.

## 抓图

一个沙盒可以被快照,一个快照从开始. 这是 获取备妥环境的 N 副本的最快方式 :

```typescript
const snapshot = await compute.snapshot.create(sandbox.instanceId)
const copy = await compute.instances.create({ snapshotId: snapshot.id })
```

源出相续. 叉子恢复确切的捕获状态: 整个根文件系统(包括 `/tmp`、内存和运行过程 (单位:千美元)`provider.snapshot.capabilities` 实值 `{ scope: 'rootfs', memory: true, destroysSource: false }`) (中文(简体) ). 没有明显的停顿:一个闲置的沙盒 自己去公园,然后在下一个命令上醒来,所以 `instance.pause()` 没有 提供.

## 支助

| 特性 | 支助 |
| --- | --- |
| `sandbox.create` 编号 : `getById` 编号 : `list` 编号 : `destroy` | 对 |
| `runCommand` (cwd, env, 背景, 超时) | 对 |
| `filesystem` (读取、写取、mkdir、读取、存在、删除) | 是的,结束了 `runCommand` |
| `template.create` 编号 : `list` 编号 : `destroy` | 是, 从容器图像 |
| `snapshot.create` 编号 : `list` 编号 : `delete` | 对 |
| `getUrl` (用于端口的公开 HTTPS URL) | 是 - 见下文 |
| 流出/断层 | 非本土; SDK 桥适用 |

## 三个值得了解的行为

**读取范围为执行输出封顶下方.** 文件以 512 KiB 读取 字节块超过基数64,然后解码为UTF-8一次. 这个可以保留 多字节字符, 一个领先的 BOM, 和后面的新行甚至横跨 块边界 。 截断响应、 已读失败、 短块和大小 更改拒绝而不是返回前缀。 联系被跟踪 嘉宾的文件权限仍然适用。 正在更改的文件不是 原子快照:如果需要的话,在阅读前先停止写作.

**写作经过了基础64,不是异端.** 异教徒的身体是每一行 因此它只能生成一个文件 _结束于 a 新线_: 写入 `hello` 并读回赠 `hello\n`Base64 没有 这种圆形,不需要逃跑(字母表是空壳形),并携带 包含异端文件不能 - 没有后继的新行, 与标记等同的行, 任意字节。 执行频道在 ~100 KB 上多降一个命令 (结果以 `exec_channel_lost`),所以满足于谁 基数64 超过 32 KB 后附a `<path>.gmn-part` 文件为切片 以最后一种方式重命名为目标 半写文件,一个大写 花费每个切片一个执行。 每个 图像飞船,所以 `base64` 已存在。 编码和 命令生成一次发生一个切片,而不是完整的列表 base64 命令在内存中保存 .

**命令被重试一次, 只针对一个错误 .** 与a的联系 沙盒是按要求重建的,所以是静静后的第一个命令 伸展可以发现它关闭,需要重拨。 没有别的事是重审的 命令运行和失败时有退出代码,因此返回, 也不是一个例外。 在罕见的情况下 沙盒确实收到 在连接被放弃前请求, 重试意味着命令可以运行 两次,通过 `execRetries: 0` 工作需要的话.

## 预览 URL

`getUrl({ port })` 返回到达服务器的公开 HTTPS URL 运行在沙盒里 - 一个编码代理刚写的页面,看 从外出 :

```ts
const sandbox = await compute.instances.create({ templateId: template.id })
await sandbox.runCommand('sh', ['-c', 'cd app && (npm run dev > /tmp/dev.log 2>&1 &)'])
const url = await sandbox.getUrl({ port: 3000 })
```

三件事决定它是否有效:

-   **服务器在沙盒回放上听.** `127.0.0.1:3000` 实值 dev 服务器默认绑定且完全正确; 主机连接 在vsock和客人拨自己的回路, 所以没有包到达 在嘉宾的网络界面。 这也意味着一个暴露的端口工程 在沙盒上准备 `egress: 'none'`。 。 。 .
-   **服务器在启动它的命令中幸存了下来.** `runCommand` 等待时间 使其命令输出结束, 因此 `npm run dev &` 一个人挂电话 然后随之而去. 重定向 : `(npm run dev > /tmp/dev.log 2>&1 &)`。 。 。 .
-   **URL是秘诀.** 主机名带有令人厌恶的 能力,所以把它当作一个密码;它过期(默认时为24小时)和 死在沙盒里 死在沙盒里 死在沙盒里. `unexposePort(sandbox, port)` 更早关闭它.

调用为每端口的同位素 - 相同的端口返回相同的 URL 刷新了过期 - 所以没有理由缓存一个.

## 限制

-   **已曝光端口仅为 HTTP( S), 它是一个预览 URL 而不是一个 疾控网.** `getUrl({port})` 薄荷到达端口的公用 HTTPS URL 在沙盒内; 请求骑取一个代理 hop, 这适合 dev 服务器或 API 您正在测试,而不是服务生产流量. 流式、SSE和WebSocket(`protocol: 'wss'`,同一URL)通过. 原始 TCP 端口不能被曝光 .
-   **集装箱图像必须贴有消化装置并符合登记条件**,以及 新来的沙盒很慢 见"集装箱影像".
-   **区域终点不能互换.** 设定 `baseUrl` 对一方 最近的你的工作量.

## 常见问题

### @computesdk/givemeanode 是什么？

givemeode for ComputeSDK - 从每个区域暖水池提供沙盒, 并有签名证书, 使数据库远离创建路径

### 如何安装 @computesdk/givemeanode？

在项目目录运行 npm install @computesdk/givemeanode，或使用 pnpm add / yarn add / bun add。

### @computesdk/givemeanode 支持 TypeScript 吗？

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

### @computesdk/givemeanode 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @computesdk/givemeanode 可以商用吗？

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

### @computesdk/givemeanode 的下载量有多少？

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

### @computesdk/givemeanode 还在维护吗？

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

