# @bem/entity-name 中文文档

规范地址：https://npmcn.com/package/%40bem/entity-name/

版本：1\.5\.0
npm 元数据更新时间：2022-06-12T15:10:03.871Z
中文译文更新时间：2026-11-07T23:02:19.850Z
软件包许可：MPL-2\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40bem/entity-name
原文对照：https://npmcn.com/package/%40bem/entity-name/?lang=original
项目主页：https://github.com/bem-sdk/bem-entity-name#readme
源码仓库：https://github.com/bem-sdk/bem-entity-name

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

- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 4\.0
- 运行依赖：3 个
- 首次发布：2016-11-25T16:36:56.011Z
- 最新版本发布：2017-04-22T12:45:25.178Z
- 近 30 天下载量：2110（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：9（近 12 个月 0 个）

## 中文简介

BEM 实体名称代表

## 安装

```sh
npm install @bem/entity-name
```

也可以使用：`pnpm add @bem/entity-name`、`yarn add @bem/entity-name`、`bun add @bem/entity-name`

## README

# 贝姆实体Name

[BEM 实体](https://en.bem.info/methodology/key-concepts/#bem-entity) 名称代表.

[![NPM Status](https://img.shields.io/npm/v/@bem/entity-name.svg)](https://www.npmjs.org/package/@bem/entity-name) [![Travis Status](https://img.shields.io/travis/bem-sdk/bem-entity-name/master.svg)](https://travis-ci.org/bem-sdk/bem-entity-name) [![Coverage Status](https://img.shields.io/coveralls/bem-sdk/bem-entity-name/master.svg)](https://coveralls.io/r/bem-sdk/bem-entity-name) [![Dependency Status](http://img.shields.io/david/bem-sdk/bem-entity-name.svg)](https://david-dm.org/bem-sdk/bem-entity-name)

## 目录

-   [安装](https://npmcn.com/package/%40bem/entity-name/#readme-install)
-   [使用量](https://npmcn.com/package/%40bem/entity-name/#readme-usage)
-   [API 密码](https://npmcn.com/package/%40bem/entity-name/#readme-api)
-   [序列化](https://npmcn.com/package/%40bem/entity-name/#readme-serialization)
-   [类型脚本支持](https://npmcn.com/package/%40bem/entity-name/#readme-typescript-support)
-   [可调试性](https://npmcn.com/package/%40bem/entity-name/#readme-debuggability)
-   [折旧](https://npmcn.com/package/%40bem/entity-name/#readme-deprecation)

## 安装

```
$ npm install --save @bem/entity-name
```

## 使用量

```js
const BemEntityName = require('@bem/entity-name');

const entityName = new BemEntityName({ block: 'button', elem: 'text' });

entityName.block; // button
entityName.elem;  // text
entityName.mod;   // undefined

entityName.id;   // button__elem
entityName.type; // elem

entityName.isEqual(new BemEntityName({ block: 'button' }));               // false
entityName.isEqual(new BemEntityName({ block: 'button', elem: 'text' })); // true
```

## API 密码

-   [构造器 ({块, elem, mod })](https://npmcn.com/package/%40bem/entity-name/#readme-constructor-block-elem-mod-)
-   [块](https://npmcn.com/package/%40bem/entity-name/#readme-block)
-   [精灵](https://npmcn.com/package/%40bem/entity-name/#readme-elem)
-   [模式](https://npmcn.com/package/%40bem/entity-name/#readme-mod)
-   [类型](https://npmcn.com/package/%40bem/entity-name/#readme-type)
-   [范围](https://npmcn.com/package/%40bem/entity-name/#readme-scope)
-   [编号](https://npmcn.com/package/%40bem/entity-name/#readme-id)
-   [已忽略](https://npmcn.com/package/%40bem/entity-name/#readme-issimplemod)
-   [等效( 实体Name](https://npmcn.com/package/%40bem/entity-name/#readme-isequalentityname)
-   [属于( 实体Name](https://npmcn.com/package/%40bem/entity-name/#readme-belongstoentityname)
-   [值( )](https://npmcn.com/package/%40bem/entity-name/#readme-valueof)
-   [转到 JSON ()](https://npmcn.com/package/%40bem/entity-name/#readme-tojson)
-   [转到 String ()](https://npmcn.com/package/%40bem/entity-name/#readme-tostring)
-   [静态创建( obj)](https://npmcn.com/package/%40bem/entity-name/#readme-static-createobj)
-   [静态为 BementityName (实体Name)](https://npmcn.com/package/%40bem/entity-name/#readme-static-isbementitynameentityname)

### 构造器 ({块, elem, mod })

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `block` | `string` | 实体的块名 . |
| `elem` | `string` | 实体的元素名称. |
| `mod` | `string`, (中文(简体) ), `object` | 实体的修饰.  
  
如果指定的值是 `string` 那样就等于 `{ name: string, val: true }`. 可选. |
| `mod.name` | `string` | 实体的修饰名称 . |
| `mod.val` | `string`, (中文(简体) ), `true` | 实体的修饰值。 可选的. |

在JS对象的帮助下,可以定义以下领域的BEM实体:

-   `block` 一个街区名。 需要此字段是因为只有一个块作为独立的 BEM 实体存在
-   `elem` - 一个元素名称.
-   `mod` - 一个修饰者.

修饰由一对字段组成 `mod.name` 财务报告和审定财务报表 `mod.val`。这意味着实地 `mod.val` 无 `mod.name` 没有任何意义.

```js
const BemEntityName = require('@bem/entity-name');

// The modifier of block
new BemEntityName({
    block: 'button',
    mod: { name: 'view', val: 'action' }
});

// Not valid modifier
new BemEntityName({
    block: 'button',
    mod: { val: 'action' }
});
// ➜ EntityTypeError: the object `{ block: 'block', mod: { val: 'action' } }` is not valid BEM entity, the field `mod.name` is undefined
```

描述一个简单的修饰符 `mod.val` 字段必须省略.

```js
// Simple modifier of a block
new BemEntityName({ block: 'button', mod: 'focused' });

// Is equivalent to simple modifier, if `mod.val` is `true`
new BemEntityName({
    block: 'button',
    mod: { name: 'focused', val: true }
});
```

### 块

此实体所属块的名称 .

```js
const BemEntityName = require('@bem/entity-name');
const name = new BemEntityName({ block: 'button' });

name.block; // button
```

### 精灵

此实体的元素名称 .

如果实体不是元素或元素的修饰者,则返回空字符串.

```js
const BemEntityName = require('@bem/entity-name');
const name = new BemEntityName({ block: 'button', elem: 'text' });

name.elem; // text
```

### 模式

此实体之修饰.

**重要内容:** 如果实体不是修改符,则返回 `undefined`。 。 。 .

```js
const BemEntityName = require('@bem/entity-name');

const blockName = new BemEntityName({ block: 'button' });
const modName = new BemEntityName({ block: 'button', mod: 'disabled' });

modName.mod;   // { name: 'disabled', val: true }
blockName.mod; // undefined
```

### 类型

此实体的类型 .

可能的值 : `block`, (中文(简体) ), `elem`, (中文(简体) ), `blockMod`, (中文(简体) ), `elemMod`。 。 。 .

```js
const BemEntityName = require('@bem/entity-name');

const elemName = new BemEntityName({ block: 'button', elem: 'text' });
const modName = new BemEntityName({ block: 'menu', elem: 'item', mod: 'current' });

elemName.type; // elem
modName.type;  // elemMod
```

### 范围

这一实体的范围.

**重要内容:** 块类型实体没有范围.

```js
const BemEntityName = require('@bem/entity-name');

const buttonName = new BemEntityName({ block: 'button' });
const buttonTextName = new BemEntityName({ block: 'button', elem: 'text' });
const buttonTextBoldName = new BemEntityName({ block: 'button', elem: 'text', mod: 'bold' });

buttonName.scope;         // null
buttonTextName.scope;     // BemEntityName { block: 'button' }
buttonTextBoldName.scope; // BemEntityName { block: 'button', elem: 'elem' }
```

### 编号

这个实体的ID.

**重要内容:** 只能用来确定实体的独特性.

如果您想要根据命名公约的规定获得字符串代表, 您应该使用 [@ bem/ 命名](https://github.com/bem-sdk/bem-naming) 软件包.

```js
const BemEntityName = require('@bem/entity-name');
const name = new BemEntityName({ block: 'button', mod: 'disabled' });

name.id; // button_disabled
```

### 已忽略

确定修改是否简单.

**页:1**: 对于不作修改的实体 `isSimpleMod()` 返回时 `null`。 。 。 .

```js
const BemEntityName = require('@bem/entity-name');
const modName = new BemEntityName({ block: 'button', mod: { name: 'theme' } });
const modVal = new BemEntityName({ block: 'button', mod: { name: 'theme', val: 'normal' } });
const block = new BemEntityName({ block: 'button' });

modName.isSimpleMod(); // true
modVal.isSimpleMod(); // false
block.isSimpleMod(); // null
```

### 等效( 实体Name

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `entityName` | `BemEntityName` | 比较的实体. |

确定指定的实体是否为深等实体.

```js
const BemEntityName = require('@bem/entity-name');

const inputName = new BemEntityName({ block: 'input' });
const buttonName = new BemEntityName({ block: 'button' });

inputName.isEqual(buttonName);  // false
buttonName.isEqual(buttonName); // true
```

### 属于( 实体Name

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `entityName` | `BemEntityName` | 比较的实体. |

确定指定实体是否属于此类别.

```js
const BemEntityName = require('@bem/entity-name');

const buttonName = new BemEntityName({ block: 'button' });
const buttonTextName = new BemEntityName({ block: 'button', elem: 'text' });
const buttonTextBoldName = new BemEntityName({ block: 'button', elem: 'text', mod: 'bold' });

buttonTextName.belongsTo(buttonName);         // true
buttonName.belongsTo(buttonTextName);         // false
buttonTextBoldName.belongsTo(buttonTextName); // true
buttonTextBoldName.belongsTo(buttonName);     // false
```

### 值( )

返回代表实体名称的正态对象.

```js
const BemEntityName = require('@bem/entity-name');
const name = new BemEntityName({ block: 'button', mod: 'focused' });

name.valueOf();

// ➜ { block: 'button', mod: { name: 'focused', value: true } }
```

### 转到 JSON ()

返回原始数据 `JSON.stringify()` 目标.

```js
const BemEntityName = require('@bem/entity-name');

const name = new BemEntityName({ block: 'input', mod: 'available' });

JSON.stringify(name); // {"block":"input","mod":{"name":"available","val":true}}
```

### 转到 String ()

返回代表实体名称的字符串.

**重要内容:** 如果您想要根据命名公约的规定获得字符串代表 您应该使用 [@ bem/ 命名](https://github.com/bem-sdk/bem-naming) 软件包.

```js
const BemEntityName = require('@bem/entity-name');
const name = new BemEntityName({ block: 'button', mod: 'focused' });

name.toString(); // button_focused
```

### 静态创建( 对象)

创建贝姆实体 以任何对象表示或字符串命名实例.

帮助无糖简洁.

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `object` | `object`, (中文(简体) ), `string` | 实体名称的表示. |

Passed Object 可以为实体设置共同的字段名 :

| 对象字段 | 类型 | 说明 |
| --- | --- | --- |
| `block` | `string` | 实体的块名 . |
| `elem` | `string` | 实体的元素名称。 可选的. |
| `mod` | `string`, (中文(简体) ), `object` | 实体的修饰.  
  
如果指定的值是 `string` 那样就等于 `{ name: string, val: true }`. 可选. |
| `val` | `string` | 实体的修饰值。 用于 `mod` 是一个字符串。 可选的. |
| `mod.name` | `string` | 实体的修饰名称 。 可选的. |
| `mod.val` | `string`, (中文(简体) ), `true` | 实体的修饰值。 可选的. |
| `modName` | `string` | 实体的修饰名称 。 用于 `mod.name` 未指定。 可选的. |
| `modVal` | `string`, (中文(简体) ), `true` | 实体的修饰值。 如果没有使用,则使用 `mod.val` 也没有 `val` 未具体说明。 可选的. |

```js
const BemEntityName = require('@bem/entity-name');

BemEntityName.create('my-button');
BemEntityName.create({ block: 'my-button' });
// ➜ BemEntityName { block: 'my-button' }

BemEntityName.create({ block: 'my-button', mod: 'theme', val: 'red' });
BemEntityName.create({ block: 'my-button', modName: 'theme', modVal: 'red' });
// ➜ BemEntityName { block: 'my-button', mod: { name: 'theme', val: 'red' } }

BemEntityName.create({ block: 'my-button', mod: 'focused' });
// ➜ BemEntityName { block: 'my-button', mod: { name: 'focused', val: true } }
```

### 静态为 BementityName (实体Name)

确定指定实体是否为 Bemnentity 实例Name.

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `entityName` | `*` | 要检查的实体. |

```js
const BemEntityName = require('@bem/entity-name');

const entityName = new BemEntityName({ block: 'input' });

BemEntityName.isBemEntityName(entityName); // true
BemEntityName.isBemEntityName({ block: 'button' }); // false
```

## 序列化

这个 `BemEntityName` 已经 `toJSON` 支持的方法 `JSON.stringify()` 行为.

使用 `JSON.stringify` 序列化实例 `BemEntityName`。 。 。 .

```js
const BemEntityName = require('@bem/entity-name');

const name = new BemEntityName({ block: 'input', mod: 'available' });

JSON.stringify(name); // {"block":"input","mod":{"name":"available","val":true}}
```

使用 `JSON.parse` 将 JSON 字符串去序列化并创建实例 `BemEntityName`。 。 。 .

```js
const BemEntityName = require('@bem/entity-name');

const str = '{"block":"input","mod":{"name":"available","val":true}}';

new BemEntityName(JSON.parse(str)); // BemEntityName({ block: 'input', mod: 'available' });
```

## 类型脚本支持

软件包包括 [输入](https://npmcn.com/package/%40bem/entity-name/index.d.ts) 用于类型脚本。 须自设转相. 当你准备好 `module` 改为 `commonjs` 在你身边 `tsconfig.json` 文件, TypeScript 将自动找到类型定义 `@bem/entity-name`。 。 。 .

界面以全域命名空间提供 `BEMSDK.EntityName`。需要使用 JsDoc 中的接口.

## 可调试性

在节点J, `console.log()` 电话 `util.inspect()` 每个参数上没有格式化占位符.

`BemEntityName` 已经 `inspect()` 方法来获取对象的自定义字符串表示.

```js
const BemEntityName = require('@bem/entity-name');

const name = new BemEntityName({ block: 'input', mod: 'available' });

console.log(name);

// ➜ BemEntityName { block: 'input', mod: { name: 'available' } }
```

您也可以转换 `BemEntityName` 对象 `string`。 。 。 .

```js
const BemEntityName = require('@bem/entity-name');

const name = new BemEntityName({ block: 'input', mod: 'available' });

console.log(`name: ${name}`);

// ➜ name: input_available
```

## 折旧

折旧采用 [调试](https://github.com/dougwilson/nodejs-depd)。 。 。 .

要静音去除输出警告,请使用 `NO_DEPRECATION` 环境变量.

```
NO_DEPRECATION=@bem/entity-name node app.js
```

> 再来 [细节](https://github.com/dougwilson/nodejs-depd#processenvno_deprecation) 内 `depd` 文档

## 许可证

代码和文件 2016 YANDEX LLC. 代码根据 [Mozilla 公共许可证2.0](https://npmcn.com/package/%40bem/entity-name/LICENSE.txt)。 。 。 .

## 常见问题

### @bem/entity-name 是什么？

BEM 实体名称代表

### 如何安装 @bem/entity-name？

在项目目录运行 npm install @bem/entity-name，或使用 pnpm add / yarn add / bun add。

### @bem/entity-name 支持 TypeScript 吗？

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

### @bem/entity-name 支持 ESM 还是 CommonJS？

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

### @bem/entity-name 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>= 4\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @bem/entity-name 可以商用吗？

@bem/entity-name 使用 MPL-2\.0 许可。弱 Copyleft：可以商用，也可以和闭源代码一起使用；但如果分发时修改了 MPL 授权的文件，这些文件的修改需以 MPL 开源。以上为概括，不构成法律意见，请以许可原文为准。

### @bem/entity-name 的下载量有多少？

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

### @bem/entity-name 还在维护吗？

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

