storage:插件数据目录
使用宿主分配的数据与缓存目录,插件负责格式和迁移。
Documentation content is currently available in Simplified Chinese.
context.storage.dataDir 和 context.storage.cacheDir 是宿主在启动插件前创建的绝对路径。它们按当前宿主的用户数据目录和插件 ID 隔离,内置插件、安装包和开发文件夹使用同一规则。
#dataDir
保存需要跨重启保留的数据。路径不随插件版本或安装位置变化;升级、替换包、卸载均保留数据。同 ID 重新安装后可继续读取,另一个宿主用户数据目录拥有独立数据。宿主使用 userData/plugin-data/<插件 ID 的 SHA-256>/data 分配目录,但插件应始终读取 SDK 属性,不自行拼接该结构。
const fs = require('node:fs/promises');
const path = require('node:path');
async function save(context, value) {
const target = path.join(context.storage.dataDir, 'settings.json');
await fs.writeFile(target + '.tmp', JSON.stringify(value));
await fs.rename(target + '.tmp', target);
}插件负责文件格式、读写并发和备份。宿主只分配目录,不读取或转换插件业务数据。变更文件格式时,同步更新读写逻辑,并在更新说明中说明数据处理方式。读取到损坏或未知格式时,应保留文件并报告错误。
#cacheDir
保存可重新生成的缓存,位于同一插件命名空间下的 cache。不要把唯一的数据副本放入缓存目录;插件应能处理缓存被清空的情况。当前升级和卸载流程保留此目录。
#运行环境
使用数据目录的插件声明 "hostCapabilities": { "required": { "storage.paths": 1 } }。宿主在安装和启动前校验该要求,插件直接通过 context.storage 读取目录。
进程工作目录仍为安装包目录,仅用于读取随包资源。HOME、Windows 的 USERPROFILE、APPDATA、LOCALAPPDATA 和 XDG_DATA_HOME 指向 dataDir,XDG_CACHE_HOME 指向 cacheDir;它们不能被插件进程配置覆盖。SDK 从宿主设置的 FLYONDECK_DATA_DIR、FLYONDECK_CACHE_DIR 取得路径。
目录隔离是数据归属约定,不是文件系统沙箱。本机 Node 插件仍有当前用户的文件访问权限。os.userInfo().homedir 可能返回操作系统真实主目录,不应用它构造新的插件存储路径。