Web Storage 在 Nub 下无需记住标志即可工作。Node 在 22.4–24 带上将 sessionStoragelocalStorage 隐藏在 --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。在你这样做之前,localStorageundefined,所以 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 起无需标志。