uni-storage 0.1.0 发布:TTL过期管理+多实例隔离

v0.1.0 为首个可用版本 :以 uni.setStorage

系列原生 API 为唯一底层依赖、不重造存储栈,把 TTL 过期管理、key 命名规范、Promise 化、多实例隔离这些每次都要重写的重复劳动收进一套 axios 心智的 API。Web 端 22 项功能验证日志全部通过;Android

Kotlin 编译链已打通,云打包 release 编译零错误,真机用例验证待进行。

一、为什么做这个库

直接用 uni.setStorage 写业务,四件事反复发生:

  • 回调风格:原生 API 是 success/fail 回调,异步编排与错误处理全靠业务手工包装
  • 无过期管理:缓存写进去就是永久的,TTL 轮转要自己包时间戳、自己扫过期
  • key 裸奔 :命名无规范,clear() 一键清库会误伤框架与其他模块数据(uni- / dcloud_ 保留前缀冲突)
  • 无多实例:不同业务域的缓存共享一个扁平 key 空间,隔离全靠约定

unix-storage 把这些收敛成一套库:写过 axios 的开发者看一眼 API 就能上手;clear / 清理只作用于本命名空间;全链路强类型标注。

二、核心能力

Promise 化全量 API

uts 复制代码
import { set, get } from '@/uni_modules/ux-storage'

await set('token', tokenInfo, 3600_000)
const token = await get('token') // 未命中 / 已过期返回 null,不 reject

set / get<T> / remove / clear / info / keys / clearExpired 全量 async/await,业务侧不再手写 success/fail 包装。

TTL 过期管理

record 包裹过期时间戳,读取惰性判断(Date.now() > expire 即移除并返回 null);clearExpired() 全量扫描返回清理条数。TTL 三级回退:调用级 ttl → 实例 defaultTTL → 内置永不过期,对齐 unix-request 三级合并心智。

key 前缀命名空间

默认前缀 mx_storage:(规避 uni- / dcloud_ 平台保留前缀,非法前缀在操作期以 ERR_PARAM 拦截);keys() 剥前缀返回原始 key;clear() 按前缀过滤后逐个移除------只清理本命名空间,不触碰其他数据。

多实例

uts 复制代码
import { createStorage } from '@/uni_modules/ux-storage'
import type { StorageDefaults } from '@/uni_modules/ux-storage'

const cacheStore = createStorage({ keyPrefix: 'api_cache:', defaultTTL: 300_000 } as StorageDefaults)
await cacheStore.set('user:1', user, null) // 前缀独立,与默认实例互不可见

默认实例开箱即用,configureStorage 配置全局默认;createStorage(defaults) 创建隔离实例,心智对标 axios.create。

统一可预测的错误结构

StorageError 收敛 2 类错误码(ERR_PARAM 参数 / 保留前缀拦截、ERR_NATIVE 原生失败),原生 errCode 经 nativeErrCode 原值透传不翻译,errSubject 固定 unix-storage,key

挂载关联业务原始 key------错误定位不用翻底层日志。

兼容策略

读到非本库写入格式的数据(业务直写原生 API 的存量数据)按「无过期」原样返回,不报错、不误删。

三、平台支持现状

平台 状态
Web ✅ 编译产物验证,22 项功能验证日志全部通过(基础存取 / TTL / 命名空间与多实例 / 全局配置 / clearExpired / 错误路径六个验证页)
微信小程序 代码全端同构(uni.setStorage 系列全端统一),待实测
Android ✅ 云打包 release 编译零错误;真机用例验证待进行
iOS / 鸿蒙 ⏳ 代码已适配,受环境限制暂未实测(iOS 需 macOS、鸿蒙需 DevEco Studio)

四、快速上手

bash 复制代码
pnpm add @meng-xi/unix-storage
mkdir -p uni_modules && cp -R node_modules/@meng-xi/unix-storage uni_modules/ux-storage
uts 复制代码
import { set, get, configureStorage } from '@/uni_modules/ux-storage'
import type { StorageDefaults, StorageError } from '@/uni_modules/ux-storage'

// 项目启动时配置一次全局默认(如 App.uvue onLaunch;null 表示沿用内置默认)
configureStorage({
	keyPrefix: null, // null 沿用内置默认 'mx_storage:'
	defaultTTL: null // null 永不过期
})

set('theme', 'dark', null).then(() => {
	console.log('已写入')
}).catch((err) => {
	const e = err as StorageError
	console.log(e.code, e.errMsg)
})

不想搭工程?安卓真机可直接下载体验 App :下载体验 App(APK)------上述示例工程的云打包产物,安装后即可在真机运行全部用例。

五、文档与资源

相关链接

欢迎反馈与共建:GitHub

相关推荐
猫头_2 小时前
AI 流式传输工程指南:模型吐出半截 JSON,前端如何边收边渲染?
前端·javascript·llm
console.log('npc')2 小时前
第 1 章 项目概述与环境搭建
前端·人工智能·大模型
定栓2 小时前
Webpack迁到Vite第七节(二):全家桶移除 — Babel 全家桶深度分析
前端·webpack·node.js
IT_陈寒3 小时前
React组件莫名重渲染?你可能忘了这个小细节
前端·人工智能·后端
鶴哥只手遮天3 小时前
React 19.3.1 源码深度剖析-第 12 章(下)RSC 与 Flight 协议
前端·react.js·开源
deli0073 小时前
TCP 三次握手到底发几个包?丢包重传动画实测一遍
前端
盟接之桥3 小时前
盟接之桥谈线束数字化-按单入按单出:线束企业库存管理的破局之道
大数据·前端·网络·数据库·人工智能·制造
巴勒个啦3 小时前
Prompt Engineering 实战:5 个让 AI 生成生产级业务代码的工程模式
java·前端
去伪存真3 小时前
AI时代,古法编程的码农路在何方?
前端