OneScript

数据存储

脚本数据的存放位置与保留时长。

每个项目有三个目录,脚本可以用 fs 和 node:sqlite 读写。它们的区别在于数据保留多久:

目录路径保留时长同步
持久化数据os.homedir()(process.env.HOME)一直保留,删除项目时一并删除跟随项目:开启 iCloud 同步时保存在 iCloud 云盘
临时目录os.tmpdir()(process.env.TMPDIR)跨运行保留,存储空间不足时可能被系统清理,删除项目时一并删除只在本机
构建目录process.cwd()每次运行前清空—

相对路径以 process.cwd() 为基准,因此用相对路径写入的文件在下次运行时就没有了。

持久化数据

用 fs 写入 os.homedir() 下的文件、在其中用 node:sqlite 创建的数据库会跨运行保留,App、小组件和 Action 访问的是同一份数据。

import { DatabaseSync } from 'node:sqlite';
import os from 'node:os';
import { join } from 'node:path';

const db = new DatabaseSync(join(os.homedir(), 'app.db'));
  • 每个项目有自己的数据目录,避免脚本之间互相覆盖文件。这只是默认位置,不是安全边界:脚本按受信任代码运行,可以访问 App 能访问的任意路径。
  • 数据和项目存放在一起:开启 iCloud 同步时保存在 iCloud 云盘中,更改同步方式时随项目一起迁移;删除项目时一并删除。
  • iCloud 按文件同步,而不是按数据库事务同步。请避免在多台设备上同时写入同一个 SQLite 数据库,否则改动可能发生冲突。

临时数据

os.tmpdir() 适合存放可以重新生成的缓存,例如下载的图片。它只保存在本机,不会同步到 iCloud。

How is this guide?

最后更新于

本页目录