@computesdk/givemeanode

中文文档
1.2.16发布于 2026/11/07MITTypeScriptESM + CJS构建来源已验证近 30 天下载 8569

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

中文使用文档
文档目录12 节
  1. 安装和设置
  2. 使用量
  3. 配置
  4. 要求多个核心
  5. 容器图像
  6. 签名的证书, 为什么你免费得到它
  7. 一个连接一个破裂
  8. 抓图
  9. 支助
  10. 三个值得了解的行为
  11. 预览 URL
  12. 限制

@ computesdk/ givememode (英语)

给定 计算SDK的提供者。 这么快 微VM沙盒.

安装和设置

npm install @computesdk/givemeanode

把它装入一个 .env 文档。 任何管家都可以用薄荷薄荷 团队 或 CLI; 显示一次.

gman token create --name computesdk --workspace my-workspace
# prints GMN_TOKEN=gmnt_... once
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

使用量

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()

配置

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

要求多个核心

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

// 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个GiB2个GiB
sandbox-md页:18个GIB16 吉贝
sandbox-lg第8条32个GIB32个GIB
sandbox-xl16个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}多收点钱.

容器图像

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

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

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

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 从不给一个.
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 副本的最快方式 :

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\nBase64 没有 这种圆形,不需要逃跑(字母表是空壳形),并携带 包含异端文件不能 - 没有后继的新行, 与标记等同的行, 任意字节。 执行频道在 ~100 KB 上多降一个命令 (结果以 exec_channel_lost),所以满足于谁 基数64 超过 32 KB 后附a <path>.gmn-part 文件为切片 以最后一种方式重命名为目标 半写文件,一个大写 花费每个切片一个执行。 每个 图像飞船,所以 base64 已存在。 编码和 命令生成一次发生一个切片,而不是完整的列表 base64 命令在内存中保存 .

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

预览 URL

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

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 共发布 22 个版本,首次发布于 2026/09/03;过去 12 个月发布了 22 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.2.16latest2026/11/073 天前
1.2.152026/11/064 天前
1.2.142026/11/046 天前
1.2.132026/10/2813 天前
1.2.122026/10/2318 天前
1.2.112026/10/2318 天前

关于 @computesdk/givemeanode 的常见问题

@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 和提交记录判断。