# @computesdk/novita 中文文档

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

版本：0\.0\.17
npm 元数据更新时间：2026-11-06T13:42:34.447Z
中文译文更新时间：2026-11-10T14:52:30.665Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：82.1 kB，9 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=20
- 运行依赖：3 个
- 首次发布：2026-09-21T18:26:25.786Z
- 最新版本发布：2026-11-06T13:42:34.239Z
- 近 30 天下载量：7079（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：17（近 12 个月 17 个）

## 中文简介

Novita Sandbox 计算SDK- 有本地流线、 文件系统访问和快照的云沙盒提供商

## 安装

```sh
npm install @computesdk/novita
```

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

## README

# @ computesdk/ novita

计算SDK的 Novita Sandbox 提供者, 使用官方 `novita-sandbox` SDK(英语:SDK). 需要20号或更新的节点.

## 设置

```bash
npm install computesdk @computesdk/novita
export NOVITA_API_KEY=your_api_key
```

`NOVITA_API_KEY` 是该提供者配置的唯一环境变量. Novita SDK提供默认的连接设置.

```typescript
import { novita } from '@computesdk/novita';

const sdk = novita({}); // Reads NOVITA_API_KEY
const sandbox = await sdk.sandbox.create({ timeout: 300_000 });

try {
  await sandbox.filesystem.writeFile('/tmp/hello.py', 'print("Hello from Novita")');
  const result = await sandbox.runCommand('python /tmp/hello.py');
  console.log(result.stdout);
} finally {
  await sandbox.destroy();
}
```

提供商也与共享的ComputeSDK API合作:

```typescript
import { compute } from 'computesdk';
import { novita } from '@computesdk/novita';

compute.setConfig({ provider: novita({}) });
const sandbox = await compute.instances.create();
await sandbox.destroy();
```

## 配置

| 选项 | 含义 |
| --- | --- |
| `apiKey` | 可选的显密钥;另作 `NOVITA_API_KEY`。 。 。 . |
| `timeout` | 以毫秒计的默认沙盒寿命;默认为 `300000`。 。 。 . |

`sandbox.create({ timeout })` 超过提供者超时 。 使用 `templateId` 选择模板或 `snapshotId` 以还原快照; 省略两者 `base`这两种身份是相互排斥的。 创建也接受 `envs`, (中文(简体) ), `metadata`,以及当地人 `secure`, (中文(简体) ), `allowInternetAccess`, (中文(简体) ), `network`,以及 `lifecycle` 选项。 框架选项,例如: `signal` 未转发给 诺维塔SDK.

## 命令和文件

`runCommand` 支持 `cwd`, (中文(简体) ), `env`, (中文(简体) ), `timeout`,以及本地流回调:

```typescript
const result = await sandbox.runCommand('python -u /tmp/hello.py', {
  cwd: '/tmp',
  env: { MODE: 'test' },
  timeout: 60_000,
  onStdout: chunk => process.stdout.write(chunk),
  onStderr: chunk => process.stderr.write(chunk),
});
```

命令超时与沙盒寿命分开. 非零命令退出 返回其输出和退出代码。 认证、网络和超时出错 拒绝电话.

`background: true` 启动本地背景进程并返回确认 带有退出代码 `0` 和空输出。 这不报告过程的最终结果 退出状态。 对于进程控件,PID跟踪,或等待背景输出, 使用情况 `sandbox.getInstance().commands.run(command, { background: true })`。 。 。 . 背景模式不能通过ComputeSDK与流回调合并.

文件系统支持 `readFile`, (中文(简体) ), `writeFile`, (中文(简体) ), `mkdir`, (中文(简体) ), `readdir`, (中文(简体) ), `exists`, (中文(简体) ), 财务报告和审定财务报表 `remove`。普通读取/写入接口处理文本;二进制操作 可通过 `sandbox.getInstance().files`。 。 。 .

## 寿命周期和URL

-   `sdk.sandbox.getById(id)` 连接到沙盒; 只有未找到的响应 变成 `null`。连接到暂停的沙盒可以恢复它.
-   `sdk.sandbox.list()` 获取所有运行中的沙盒并连接到 每一个这样返回的对象都可以执行命令。 连接可能扩展沙盒 根据诺维塔的连结行为,终生 暂停的沙盒不包括在内.
-   `sandbox.getInfo()` 读取当前 SDK 信息 。 暂停映射到 `stopped`· ; 在元数据中保留原生状态. `timeout` 之间的间隔 aPI的广告 `startedAt` 财务报告和审定财务报表 `endAt` 时间戳.
-   `sandbox.destroy()` 如果沙盒已经不见了,用ID杀死它并成功.
-   `sandbox.getUrl({ port: 3000 })` 返回 HTTPS 服务 URL。 绑定您的服务器 改为 `0.0.0.0`. Novita 服务访问可能需要交通信号; URL本身 不公开服务。 原始符号信息可通过 `sandbox.getInstance()`。 。 。 .

## 暂停并恢复

```typescript
await sandbox.pause();
await sandbox.resume();
```

暂停保存内存, 因此文件系统的任何位置和运行 工艺存活(`sdk.sandbox.pause` 实值 `{ memory: true }`) (中文(简体) ). 续会 与砂盒创建的一生重接.

超时扩展、 PTY 和其他 SDK 特性仍可通过 `sandbox.getInstance()` 或单独的 `Novita` 客户端.

## 抓图

```typescript
const snapshot = await sdk.snapshot!.create(sandbox.instanceId);
const restored = await sdk.sandbox.create({ snapshotId: snapshot.id });
try {
  console.log(await restored.runCommand('ls /tmp'));
} finally {
  await restored.destroy();
}
await sdk.snapshot!.delete(snapshot.id);
```

抓图捕捉整个根文件系统(包括 `/tmp`,这不是 tmpfs)和内存,因此源代码中运行的流程在源代码中运行 还原了沙盒。 源头在拍摄快照时短暂地暂停 继续运行; `sdk.snapshot.capabilities` 实值 `{ scope: 'rootfs', memory: true, destroysSource: false }`。 。 。 . `snapshot.list({ instanceId, limit })` 支持通过源码过滤和总结果限制,获取额外页面 视需要而定。 抓图返回 `id`, (中文(简体) ), `snapshotId`,以及 `provider`; SDK 没有 提供创建时间戳。 不支持快照名称和元数据 .

## 模板

`template.create`, (中文(简体) ), `template.list`,以及 `template.delete` 覆盖 Novita 模板 构建 API. 创建等待构建完成并返回 `id`, (中文(简体) ), `templateId`, (中文(简体) ), `buildId`, (中文(简体) ), `provider`,而土生土长的名称/tags。 使用返回的内容 `id` 作为 页:1 `templateId` 当创建沙盒时.

```typescript
const template = await sdk.template.create({
  name: 'my-python-template',
  image: 'python:3.12',
  build: {
    cpuCount: 2,
    memoryMB: 1024,
    tags: ['dev'],
    onBuildLogs: entry => console.log(entry),
  },
});

const sandbox = await sdk.sandbox.create({ templateId: template.id });
try {
  console.log(await sandbox.runCommand('python --version'));
} finally {
  await sandbox.destroy();
}

const templates = await sdk.template.list({ limit: 50 });
console.log(templates.map(item => item.id));
await sdk.template.delete(template.id);
```

仅限 `{ name }`,创建使用诺维塔的基础图像. 对于软件包, 文件 副本、私人登记证书、启动命令或准备状态检查, 通过本地建筑师为 `template` 改为 `image`数字 :

```typescript
import { Novita } from 'novita-sandbox';

const definition = new Novita().template.new()
  .fromPythonImage('3.12')
  .pipInstall('numpy');

const template = await sdk.template.create({
  name: 'python-with-numpy',
  template: definition,
  build: { skipCache: true },
});
```

`image` 财务报告和审定财务报表 `template` 两者相互排斥. `build` 支持 `cpuCount`, (中文(简体) ), `memoryMB`, (中文(简体) ), `tags`, (中文(简体) ), `skipCache`,以及 `onBuildLogs`。本地建筑 API 不 接受常见 `description` 或者说 `metadata` 字段,所以适配器拒绝 他们。 必要时在土建商上设置起动/准备状态.

列出返回构建模板(不是快照),默认获取所有页面, 治疗 `limit` 以总结果为限。 它保存了本地模板 字段,包括时间戳和资源大小。 限额 `0` 返回空白 阵列。 如果模板已经缺失, 删除成功; 其他 API 错误 宣传。 模板删除是永久的 .

## 工作室和测试

与 `NOVITA_API_KEY` 设置, 选择 `novita` 在Workbench。 工作区.

```bash
pnpm --filter @computesdk/novita test
pnpm --filter @computesdk/novita typecheck
```

测试内容包括E2B使用的同一共享供应商合同套件,即共享的 CRUD套件和22个适配器专用单元测试:

| 套间 | 默认( 即使有 API 密钥) | 与 `NOVITA_RUN_INTEGRATION=1` 财务报告和审定财务报表 `NOVITA_API_KEY` |
| --- | --- | --- |
| 共享供应商合同(16项测试) | 运行常见的模拟沙盒 | 运行与真正的诺维塔沙盒 |
| 共享 CRUD (5个测试) | 跳过 | 删除后创建、连接、列表、销毁并检查沙盒 |
| 适应器单元测试(22个测试) | 嘲笑诺维塔 SDK | 还是嘲笑诺维塔SDK |

共享合同涵盖 shell 和背景命令,无效命令, 沙盒信息,端口3000/8080上的URL(包括自定义协议),全部6个 文件系统操作加上缺少文件错误,以及 shell 参数引用. 适配器专用套件还包括本土流线、参数和 错误映射、页码、快照和模板建立/列出/删除.

共享测试加载寄存器根 `.env`。真正的云调需要两者 `NOVITA_RUN_INTEGRATION=1` 财务报告和审定财务报表 `NOVITA_API_KEY`。单是钥匙就可以保存 `test` (包括 词根 `pnpm test`)在模拟模式并跳过直播CRUD. 选入的旗帜只是 测试开关,不是提供者配置选项。 设置在下面的命令上 进行现场测试时 共享套房在测试后清理出他们的沙盒. 模拟倒计时不能验证 诺维塔连接. 现场测试覆盖沙盒;模板和快照操作 目前只有模拟报道.

仅运行22个适配器单元测试而不使用云资源:

```bash
pnpm --filter @computesdk/novita test:unit
```

运行共享提供者和 CRUD 套房对 Novita, 设置 `NOVITA_API_KEY` 在环境或根 `.env`,然后运行 :

```bash
pnpm --filter @computesdk/test-utils build
NOVITA_RUN_INTEGRATION=1 pnpm --filter @computesdk/novita test:integration
```

重建 `@computesdk/test-utils` 更新此检出后, 诺维塔 CRUD 登记备有。 没有键或选入的旗帜,整合 套房以模拟模式运行共享合同并跳过直播 CRUD.

## 常见问题

### @computesdk/novita 是什么？

Novita Sandbox 计算SDK- 有本地流线、 文件系统访问和快照的云沙盒提供商

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

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

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

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

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

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

### @computesdk/novita 需要什么版本的 Node\.js？

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

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

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

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

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

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

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

