@ember-compat/tracked-built-ins

中文文档
0.9.1发布于 2022/11/17MITCommonJS近 30 天下载 7.1万

Tracked versions of JavaScript's built-in classes! Based on the tracked-built-ins package, but with extra interop support for classic Ember

原始使用文档
文档目录6 节
  1. Installation
  2. Usage
  3. Compatibility
  4. TypeScript
  5. Contributing
  6. License

@ember-compat/tracked-built-ins GitHub Actions Build Status

This Ember addon is based on the tracked-built-ins addon. It has been extended to include extra interop support for classic Ember.

Note: If you are experiencing issues related to the @glimmer/validator dependency, verify that you're using either embroider or ember-auto-import

= v2.4.3 in your host app to ensure that it is properly treated as an external.


This addon provides tracked versions of JavaScript's built-ins:

import {
  TrackedObject,
  TrackedArray,
  TrackedMap,
  TrackedSet,
  TrackedWeakMap,
  TrackedWeakSet,
} from '@ember-compat/tracked-built-ins';

These classes have the same APIs as their native equivalents, but reading from them or writing to them will be tracked, allowing you to use them in your Ember apps and have changes automatically propagate!

Also included is an enhanced version of the @tracked decorator, which automatically shallow-wraps the native versions of these classes:

import { tracked } from '@ember-compat/tracked-built-ins';

class Foo {
  @tracked value = 123;

  obj = tracked({});
  arr = tracked([]);
  map = tracked(Map);
  set = tracked(Set);
  weakMap = tracked(WeakMap);
  weakSet = tracked(WeakSet);
}

Note: This addon does NOT support IE 11 or older browsers. If you need to support them, consider using tracked-maps and sets instead.

Installation

ember install @ember-compat/tracked-built-ins

Usage

See the MDN documentation for each class to learn more about it:

All public APIs are the same, with a few exceptions:

  1. new TrackedArray() should receive an array instead of variable number of arguments. This decision was due to the confusing nature of new Array() in general, and for symmetry with the other new APIs.

    // bad
    new TrackedArray(123);
    new TrackedArray('foo', 'bar', 'baz');
    
    // good
    new TrackedArray([123]);
    new TrackedArray(['foo', 'bar', 'baz']);
    
  2. new TrackedObject() returns a copy of the object passed back to it, whereas new Object() will return the original object. This is to prevent accidentally mutating the original object.

    let original = {};
    let obj = new TrackedObject(original);
    
    obj.foo = 123;
    original.foo; // undefined;
    
  3. Static Array and Object methods that do not create a new Array/Object have been omitted. In general, you should use the original static methods for these features, since autotracking has nothing to do with them. The static methods that are supported are:

    • Array
      • from
      • of
    • Object
      • fromEntries

    Object.create has also been omitted, even though it creates an instance, because manual prototype manipulation is an advanced use case in general that is not currently supported.

All types will also register as instanceof their base type, so they can be used as fully transparent replacements in most circumstances.

Compatibility

  • Ember.js v3.24 (LTS) or above
  • Ember CLI v3.23 or above
  • Node.js v14 or above

TypeScript

This project follows the current draft of the Semantic Versioning for TypeScript Types specification.

  • Currently supported TypeScript versions: v4.4, v4.5, and v4.6
  • Compiler support policy: simple majors
  • Public API: all published types not in a -private module are public

Contributing

See the Contributing guide for details.

License

This project is licensed under the MIT License.

版本与发布记录

@ember-compat/tracked-built-ins 共发布 2 个版本,首次发布于 2022/11/09;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.9.1latest2022/11/173 年前
0.9.02022/11/094 年前

关于 @ember-compat/tracked-built-ins 的常见问题

@ember-compat/tracked-built-ins 是什么?

Tracked versions of JavaScript's built-in classes! Based on the tracked-built-ins package, but with extra interop support for classic Ember

如何安装 @ember-compat/tracked-built-ins?

在项目目录运行 npm install @ember-compat/tracked-built-ins,或使用 pnpm add / yarn add / bun add。

@ember-compat/tracked-built-ins 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/ember-compat__tracked-built-ins 是否存在。

@ember-compat/tracked-built-ins 支持 ESM 还是 CommonJS?

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

@ember-compat/tracked-built-ins 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js 14.* || 16.* || >= 18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@ember-compat/tracked-built-ins 可以商用吗?

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

@ember-compat/tracked-built-ins 的下载量有多少?

根据 npm 官方下载统计,@ember-compat/tracked-built-ins 在 2026/10/14 – 2026/11/12 这 30 天内被下载 70,734 次,日均约 2,358 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@ember-compat/tracked-built-ins 还在维护吗?

最新版本 0.9.1 发布于 2022/11/17(3 年前);至今共发布 2 个版本,其中过去 12 个月发布了 0 个;首次发布于 2022/11/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。