# @bangjelkoski/store2 中文文档

规范地址：https://npmcn.com/package/%40bangjelkoski/store2/

版本：2\.14\.3
npm 元数据更新时间：2025-02-20T10:45:41.860Z
中文译文更新时间：2026-11-07T16:24:05.768Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40bangjelkoski/store2
原文对照：https://npmcn.com/package/%40bangjelkoski/store2/?lang=original
项目主页：https://github.com/nbubna/store#readme
源码仓库：https://github.com/nbubna/store

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：88.9 kB，23 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2025-02-20T10:45:41.334Z
- 最新版本发布：2025-02-20T10:45:41.623Z
- 近 30 天下载量：60354（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 0 个）

## 中文简介

更好的本地化软件

## 安装

```sh
npm install @bangjelkoski/store2
```

也可以使用：`pnpm add @bangjelkoski/store2`、`yarn add @bangjelkoski/store2`、`bun add @bangjelkoski/store2`

## README

利用本地Storage和会话的功能填充和友好方式 (JSON,命名间隔,扩展等).

下载 : [socket2.min.js (中文(简体) )](https://raw.github.com/nbubna/store/master/dist/store2.min.js) 或者说 [仓库2.js](https://raw.github.com/nbubna/store/master/dist/store2.js)  
[国家预防机制](https://npmjs.org/package/store2)数字 : `npm install store2`  
[新建](http://nuget.org/packages/store2/)数字 : `Install-Package store2`

[![Build Status](https://travis-ci.org/nbubna/store.svg?branch=master)](https://travis-ci.org/nbubna/store) [![npm version](https://badge.fury.io/js/store2.svg)](https://badge.fury.io/js/store2) [![npm](https://img.shields.io/npm/dm/store2.svg?maxAge=2592000)](https://www.npmjs.com/package/store2)

## 文档

主存储功能可以处理 `set`, (中文(简体) ), `get`, (中文(简体) ), `transact`, (中文(简体) ), `setAll`, (中文(简体) ), `getAll`, (中文(简体) ), `each`,以及 `clear` 直接行动。 相形之下,这些被称为:

```javascript
store(key, data);                 // sets stringified data under key
store(key);                       // gets and parses data stored under key
store(key, fn[, alt]);            // run transaction function on/with data stored under key
store({key: data, key2: data2});  // sets all key/data pairs in the object
store();                          // gets all stored key/data pairs as an object
store((key, data)=>{ });          // calls function for each key/data in storage, return false to exit
store(false);                     // clears all items from storage
```

\[brackets\]中的参数是可选的. 还有更明确和多功能的职能:

```javascript
store.set(key, data[, overwrite]); // === store(key, data);
store.setAll(data[, overwrite]);   // === store({key: data, key2: data});
store.get(key[, alt]);             // === store(key);
store.getAll([fillObj]);           // === store();
store.transact(key, fn[, alt]);    // === store(key, fn[, alt]);
store.clear();                     // === store(false);
store.has(key);                    // returns true or false
store.remove(key[, alt]);          // removes key and its data, then returns the data or alt, if none
store.each(fn[, fill]);            // === store(fn); optional call arg will be 3rd fn arg (e.g. for gathering values)
store.add(key, data[, replacer]);  // concats, merges, or adds new value into existing one
store.keys([fillList]);            // returns array of keys
store.size();                      // number of keys, not length of data
store.clearAll();                  // clears *ALL* areas (but still namespace sensitive)
```

传入 `false` 对于可选覆盖参数,将导致 `set` 要跳过的行动 如果存储器已经有该密钥的值 。 全体 `set` 动作方法返回上一个值 对于那个键,默认。 如果覆盖为 `false` 并有一个之前的值,未使用的新 将返回值.

传入的职能 `transact` 将获得该密钥的当前值作为参数或 如果没有的话,可交替办理。 当传递函数完成后, 切换会保存返回的值 在指定的密钥下。 如果函数返回 `undefined`,将保存原始值. 这使得交易功能易于以持续的方式改变内部属性:

```javascript
store.transact(key, function(obj) {
    obj.changed = 'newValue';// this change will be persisted
});
```

传入的职能 `each` 将接收键作为第一个参数,当前值作为第二个参数;如果 `fill` 参数被指定,它的值将是每次呼叫的第三个参数(wew ever) 需要一个 `fill` 参数). 如果函数返回 `false` 在重复期间的任何时候 循环将提前退出,而不继续到下一个密钥/值对.

```javascript
store.each(function(key, value) {
    console.log(key, '->', value);
    if (key === 'stopLoop') {
        return false;// this will cause each to stop calling this function
    }
});
```

所有要选择的检索功能 `alt` 参数也可以使用该参数来指定"复活"功能. 作为参数,这些键和值(是的,也是被嵌入的)都得到,并允许您提供解析此字符串的替代方法。 这对丰富的物体特别有用 `Date` 类型。 见 [MDN的JSON.parse文档](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) 更多信息和实例。 作为替代,您可以设置一个全局复活器到 `store._.revive` 属性来处理全部 `get`, (中文(简体) ), `getAll`, (中文(简体) ), `remove`,以及 `transact` 打电话.

同样,设置函数需要选择 `overwrite` 参数也可以使用该参数接受一个"重置器"函数,该函数接收每个键和值(是,也被嵌入了)作为参数,并允许您提供其他的字符串方法. 这对丰富的物体特别有用 `Map` 或者说 `Set`。见 [MDN 的 JSON. 字符串文件](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) 更多信息和实例。 作为替代,您可以设置一个全局替换器到 `store._.replace` 属性来处理全部 `set`, (中文(简体) ), `setAll`, (中文(简体) ), `add`,以及 `transact` 打电话.

对于 `getAll` 财务报告和审定财务报表 `keys`,可以选择在对象或列表中分别通过, 您想要添加结果。 这不是一个空列表 . 你可能需要或想要这个的特殊情况, 一般来说,大多数用户应该忽略这些可选参数. 两者都使用第二个可选的参数 `each` 函数, 这也是一个特色。 这个 `value` 参数作为 调用函数的第二个参数(取代与当前键相关的数据) 并在结尾返回。 同样,大多数用户不应需要这一功能. 所有这些都使用了浏览器的本地Storage(aka"local"). 使用会话Storage仅需要 调用相同的函数 `store.session`数字 :

```javascript
store.session("addMeTo", "sessionStorage");
store.local({lots: 'of', data: 'altogether'});// store.local === store :)
```

也有一个商店API自动用于保存非持久性信息, 意思是只持续到页面重新装入 .

```javascript
store.page("until","reload");
```

所有细节 `get`, (中文(简体) ), `set`可在 `store.session`, (中文(简体) ), `store.local`,以及 `store.page`,以及经由 `store.area(name, customStorageObject)` 通过扩展,其中自定义Storage对象必须执行 [存储接口](http://dev.w3.org/html5/webstorage/#the-storage-interface)。这就是如何 [商店. old.js (中文(简体) )](https://raw.github.com/nbubna/store/master/src/store.old.js) 扩展 store.js支持更古老的IE和Firefox版本.

如果您想将不同页面或区域 f 中存储的数据放入单独的命名空间, 页:1 `store.namespace(ns)` 函数是您的朋友 :

```javascript
var cart = store.namespace('cart');
cart('total', 23.25);// stores in localStorage as 'cart.total'
console.log(store('cart.total') == cart('total'));// logs true
console.log(store.cart.getAll());// logs {total: 23.25}
cart.session('group', 'toys');// stores in sessionStorage as 'cart.group'
```

命名空间提供与 `store` 但按需要默默地添加/删除命名空间前缀. 它还使命名空间的API直接通过 `store[namespace]` (例如:. `store.cart`只要这样 不与商店 API 中已有的部分相冲突.

“ namespace” 函数是三个“ extra” 函数之一, 这些函数也是“ store API” 的一部分 :

```javascript
store.namespace(prefix);// returns a new store API that prefixes all key-based functions
store.isFake([force]);// test or set whether localStorage/sessionStorage or an in-memory, 'fake' storage is used
```

`store.namespace` 也可以使用额外的参数来创建在被调用存储区域中的命名空间,以及 用于高级使用大小写(例如:. `store.page.namespace("subpage", true, ":")`) (中文(简体) ).

如果本地Storage或SessionStorage不可用,它们会被伪造以防止出错, 但是,所储存的数据不会持续到当前文件/页的寿命后。 使用 [商店. old.js (中文(简体) )](https://raw.github.com/nbubna/store/master/src/store.old.js) 扩展以添加对古代浏览器中存储 API 的持续支持.

`isFake(true|false)` 在试验情况下强迫使用临时、假储存特别有用, 防止挤出实际存储.

## 扩展

这些大多可以使用进一步的文件 和滥用... er... 欢迎捐款! 特别是,任何ES6用户都有兴趣制作这些软件 [可导入ES6](https://github.com/nbubna/store/issues/31) 将不胜感激.

#### Beta - 稳定且绝对有用

-   [商店. old.js (中文(简体) )](https://raw.github.com/nbubna/store/master/src/store.old.js) - 为古代浏览器添加工作本地Storage和会话Storage多填充
-   [存储. overflow.js](https://raw.github.com/nbubna/store/master/src/store.overflow.js) - 回到假存储 配额错误
-   [存储.cache.js](https://raw.github.com/nbubna/store/master/src/store.cache.js) - 使数据过期,通过几秒钟,以覆盖(第三段) `set()` 电话
-   [(原始内容存档于2018-09-21). socket.on.js](https://raw.github.com/nbubna/store/master/src/store.on.js) - 高级存储事件处理(每个密钥,每个命名空间等在IE9+)
-   [(原始内容存档于2018-03-25). socket.array.js](https://raw.github.com/nbubna/store/master/src/store.array.js) - 对任何和所有数据(如:. `store.push(key, v1, v2)`) (中文(简体) ).
-   [存储. dom.js](https://raw.github.com/nbubna/store/master/src/store.dom.js) - 申报性、持久性的DOM元素通过商店含量.
-   [cookie.js (中文(简体) )](https://raw.github.com/nbubna/store/master/src/store.cookie.js) - 支持饼干作为存储区域: `store.cookie('num',1)` 以方便后端共享.

#### 阿尔法 - 或不完整或不稳定,或两者兼有

-   [(原始内容存档于2018-10-21). socket.quota.js](https://raw.github.com/nbubna/store/master/src/store.quota.js) - 登记回调处理(甚至取消)配额错误
-   [措施](https://raw.github.com/nbubna/store/master/src/store.measure.js) - 测量所用和可用空间的实验扩展(需要工作)
-   [商店。](https://raw.github.com/nbubna/store/master/src/store.onlyreal.js) \- 当只有假存储器可用时,沉默地失败而不是假装.
-   [存储.dot.js](https://raw.github.com/nbubna/store/master/src/store.dot.js) - 为密钥创建存取器(例如:. `store.foo == store.get('foo')`(中文(简体) )
-   [商店. dep.js](https://raw.github.com/nbubna/store/master/src/store.deep.js) - 允许从存储对象(例如:. `store.get('key.property')`(中文(简体) )
-   [(原始内容存档于2017-09-28). socket.async.js](https://raw.github.com/nbubna/store/master/src/store.async.js) - 添加内容 `store.async` 复制到每个存储和命名空间,这些存储和命名空间同步执行函数,并返回一个完成后解决的许诺.
-   [cookies.js (中文(简体) )](https://raw.github.com/nbubna/store/master/src/store.cookies.js) - 支持用商店API(如:. `store.cookies.get('user')`(中文(简体) )

#### 写入您的扩展名

要写入自己的扩展名,您可以使用或小心地覆盖已曝光的内部函数,作为 `store._`。 。 。 . 特别是 `store._.fn(fnName, fn)` 自动添加您新函数的方法 每一个实例 `store` 接口(例如). `store`, (中文(简体) ), `store.session` 以及所有现有和未来的名称空间)。 注意使用它,因为它将超越现有方法. 以下是一个简单的例子:

```javascript
(function(_) {
    _.fn('falsy', function(key) {
        return !this.get(key);
    });
    _.fn('truthy', function(key) {
        return !this.falsy(key);
    });
})(store._);
```

此扩展将像这样使用 :

```javascript
store('foo', 1);
store.falsy('foo'); // returns false

store.session('bar', 'one');
store.session.truthy('bar'); // return true;

const widgetStore = store.namespace('widget');
widgetStore.falsy('state'); // returns true
```

## 释放历史

-   2010-02-10 v0.1 (摘自esha.js) (中文(简体) )
-   2010-05-25 v1.0 (内部发布)
-   2013-04-09 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.0.3) (公开) - 第一次 GitHub 发布
-   2013-04-20 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.1.0) (公有) - 放弃有缺陷/混淆/未使用密钥(一)方法,修复扩展问题.
-   2013-04-30 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.1.1) (public) - 浏览(和朋友)支持(模块.exports=商店)
-   2013-05-30 (英语) [页:1](https://github.com/nbubna/store/tree/2.1.2) (公共) - 构成部分支助(旧构成部分.json现在是bower.json)
-   2014-03-10 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.1.6) (公开) -- -- AMD支助和构成部分改进
-   2015-02-02 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.2.0) (公用) - 更改商店.cache.js 使用秒,而不是分钟.
-   2015-05-05 (英语) [页:1](https://github.com/nbubna/store/tree/2.2.1) (公有) - 节点相容性
-   2015-05-08 (中文(简体) ) [编号:](https://github.com/nbubna/store/tree/2.2.2) (公有) - 总是暴露全球,允许扩展永远有效.
-   2015-05-22 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.3.0) (公开) - 使用假存储 Safari 私有模式(而不是让配额例外取消)
-   2015-10-27 (英语) [页:1](https://github.com/nbubna/store/tree/2.3.2) (公开) - 添加源地图
-   2017-01-04 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.4.0) (公有) - 添加 store. transact(键, fn \[, alt\])
-   2017-01-09 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.5.0) (公开) - 第34期更新;新的扩展(阵列、点和深层);仅在非AMD/CommonJS环境中曝光全球(PR #35)
-   2017-08-09 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.5.2) (公开) - 修复 `clear()` (tx至Martin Kluska) 假存储
-   2018-01-18 (英语) [页:1](https://github.com/nbubna/store/tree/2.5.11) (公开) - 添加 `index.d.ts` 在根中提供类型脚本支持
-   2018-01-23 (英语) [页:1](https://github.com/nbubna/store/tree/2.6.0) (公开) - 支助 `each(fn,value)`, (中文(简体) ), `getAll(fillObj)`,以及 `keys(fillList)` \* 支持一些高级/小型案件
-   2018-11-15 (英语) [页:1](https://github.com/nbubna/store/tree/2.7.1) (公开) - 添加 `add(key, data)` 用于保存现有和新数据的常见情况。 解决60号问题.
-   2019-07-23 (中文(简体) ) [v 2.8.0 (韩语)](https://github.com/nbubna/store/tree/2.8.0) (公开) - 添加 `store(fn)` 快捷键 `store.each`,在继承时复制属性,并制作 `store.each(fn, fill)` 总是以 3rd arg 发送填充,而不是替换值 .
-   2019-08-21 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.9.0) (public) - 添加 store.remove(密钥, alt)来匹配 store.get(密钥, alt)的行为(问题#68)
-   2019-09-27 (中文(简体) ) [v2.10.0 (中文(简体) )](https://github.com/nbubna/store/tree/2.10.0) (公开) - 添加 `store.page` 以提供页面范围存储,补充本地和会话范围存储。 (问题69)
-   2020-03-23 \[v2.11.0\] (公开) - 添加 `store.get(key, reviveFn)` 和 QQstore. .revive 支持对丰富类型进行剖析(例如日期)
-   2020-04-14 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.11.1) (公有) - 修复虚假的替代值支持 `store.get(key, alt)`
-   2020-05-11 (中文(简体) ) [v2.11.2 (中文(简体) )](https://github.com/nbubna/store/tree/2.11.2) (公有) - 修复缺失的TS声明新页面范围存储.
-   2020-08-12 (中文(简体) ) [页:1](https://github.com/nbubna/store/tree/2.12.0) (公有) - PR用于更好的存储打字,更好的测试Key,和dev依赖性更新.
-   2021-12-16 (英语) [v2.13.1 (中文(简体) )](https://github.com/nbubna/store/tree/2.13.1) (公开) - 添加 `store.set(key, value, replacerFn)`, (中文(简体) ), `store._replace`,以及 `isFake([force])` 用于支持字符串化丰富的类型和更容易的测试。 而基于 cookie 的扩展,用于使用由单一"存储" cookie 支持的商店或存储 API 用于所有 cookie.
-   2022-03-14 (英语) [页:1](https://github.com/nbubna/store/tree/2.13.2) (公开) - 恢复缺失的 TS 存储声明. area (id \[, area\])
-   2022-05-11 (英语) [页:1](https://github.com/nbubna/store/tree/2.14.0) (public) - 允许通过 store. .nsdelim 更改命名空间分隔器
-   2022-07-14 (英语) [页:1](https://github.com/nbubna/store/tree/2.14.1) (公开) - 更改为 `set` 并允许将命名空间分隔符传递给 `namespace(name, thisAreaOnly, delim)` 用于单个命名空间,以避免冲突.
-   2022-07-18 (英语) [v 2.14.2](https://github.com/nbubna/store/tree/2.14.2) (公用) - 校对:Soup `index.d.ts` 打字声.
-   2024-02-14 (英语) [页:1](https://github.com/nbubna/store/tree/2.14.3) (公开) - 剪切许可证选项仅麻省理工学院, 也取消了鲍尔和组件支持,因为这些已经很久了.

## 常见问题

### @bangjelkoski/store2 是什么？

更好的本地化软件

### 如何安装 @bangjelkoski/store2？

在项目目录运行 npm install @bangjelkoski/store2，或使用 pnpm add / yarn add / bun add。

### @bangjelkoski/store2 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @bangjelkoski/store2 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @bangjelkoski/store2 可以商用吗？

@bangjelkoski/store2 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @bangjelkoski/store2 的下载量有多少？

根据 npm 官方下载统计，@bangjelkoski/store2 在 2026/10/08 – 2026/11/06 这 30 天内被下载 60,354 次，日均约 2,012 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @bangjelkoski/store2 还在维护吗？

最新版本 2\.14\.3 发布于 2025/02/20（1\.7 年前）；至今共发布 1 个版本，其中过去 12 个月发布了 0 个；首次发布于 2025/02/20。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

