开始使用

什么是 @graphif/fs

@graphif/fs 是一个操作文件系统的库,旨在提供一个抽象的文件系统接口。它允许开发者通过注册不同的提供者(FsProvider)来适配各种文件系统实现,例如本地文件系统、内存文件系统或远程文件系统。

// 只需创建一个全局的 fs 实例,并注册所需的提供者,即可使用统一的文件系统接口进行文件操作

import { URI } from "vscode-uri";
import { createFs } from "@graphif/fs";
import { FsProviderTauri } from "@graphif/fs-tauri";
import { FsProviderHttp } from "@graphif/fs-http";
import { fetch } from "@tauri-apps/plugin-http";

const fs = createFs()
  // 提供 `file` 协议的支持
  .use(FsProviderTauri)
  // 提供 `http` `https` `webdav` `webdavs` `dav` `davs` 协议的支持
  .use(FsProviderHttp, fetch);

// 现在可以通过统一的 fs 实例进行文件操作了
await fs.read(URI.file("/home/user/file.txt"));
await fs.read(URI.parse("https://example.com/file.txt"));
// 需要手动判断不同的 URI scheme,然后调用不同的 API 进行文件操作,非常繁琐

import { URI } from "vscode-uri";
import { readFile } from "@tauri-apps/plugin-fs";
import { fetch } from "@tauri-apps/plugin-http";

async function myReadFile(uri: URI): Promise<Uint8Array> {
  if (parsedUri.scheme === "file") {
    // 读取本地文件系统
    return await readFile(parsedUri.fsPath);
  } else if (parsedUri.scheme === "http" || parsedUri.scheme === "https") {
    // 通过 HTTP(S) 获取远程文件
    return new Uint8Array(await (await fetch(uri)).arrayBuffer());
  } else {
    throw new Error(`Unsupported URI scheme: ${parsedUri.scheme}`);
  }
}

await myReadFile(URI.file("/home/user/file.txt"));
await myReadFile(URI.parse("https://example.com/file.txt"));