Web Storage
会话存储开箱即用;持久本地存储在指向后端文件后开启。
Web Storage 在 Nub 下无需记住标志即可工作。Node 在 22.4–24 带上将 sessionStorage 和 localStorage 隐藏在 --experimental-webstorage 之后(25 起原生),所以 Nub 恰好在该带上为你注入该标志——你从不需要传递它。Node 22.4 以下该标志不存在,Web Storage 不可用。
会话存储
sessionStorage 全局变量是内存中的、每进程的:每次运行创建新的,进程退出时丢弃,从不触及磁盘。它在 Node 22.4+ 上开箱即用——无需传递任何东西:
sessionStorage.setItem("step", "1");
sessionStorage.getItem("step"); // "1"
sessionStorage.length; // 1
sessionStorage.key(0); // "step"
sessionStorage.removeItem("step");
sessionStorage.clear();一次运行内多步骤流程的简短演示:
sessionStorage.setItem("cursor", "0");
for (const page of pages) {
const seen = Number(sessionStorage.getItem("cursor"));
process(page, seen);
sessionStorage.setItem("cursor", String(seen + 1));
}
console.log(sessionStorage.getItem("cursor")); // pages.length从 Node 22.15.0 上的 Nub 捕获(无标志、无文件传递):
$ nub session.ts
1
length 1本地存储
localStorage 全局变量跨运行持久化,所以它需要磁盘上的文件来写入。传递 --localstorage-file <path>,Nub 原样转发给 Node。在你这样做之前,localStorage 是 undefined,所以 typeof localStorage === "undefined" 是功能检查。命名后端文件,全局变量就激活了:
localStorage.setItem("token", "abc123");
localStorage.getItem("token"); // "abc123"
localStorage.length; // 1
localStorage.key(0); // "token"
localStorage.removeItem("token");
localStorage.clear();命名后端文件,值在运行间持久化:
$ nub --localstorage-file=./app.db write.ts
abc123
$ nub --localstorage-file=./app.db read.ts
abc123--localstorage-file 标志在 NODE_OPTIONS 中设置时也被遵守。
你的显式 webstorage 标志优先
如果你自行传递 --experimental-webstorage(或 --no-experimental-webstorage),Nub 尊重它且不注入任何东西。版本带编码在 crates/nub-core/src/node/flags.rs 中:该标志从 Node 22.4.0 存在,在 24.x 以下需要,25.0.0 起无需标志。