# @bonniernews/eslint-config 中文文档

规范地址：https://npmcn.com/package/%40bonniernews/eslint-config/

版本：3\.1\.0
npm 元数据更新时间：2026-09-22T14:08:28.462Z
中文译文更新时间：2026-11-08T11:00:25.433Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：95.2 kB，20 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=18
- 运行依赖：10 个
- peer 依赖：eslint \>=9\.19\.0，typescript \>=5\.7\.3
- 首次发布：2023-09-11T11:14:05.376Z
- 最新版本发布：2026-09-22T14:08:27.981Z
- 近 30 天下载量：20891（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：28（近 12 个月 5 个）

## 中文简介

ESLint 配置

## 安装

```sh
npm install @bonniernews/eslint-config
```

也可以使用：`pnpm add @bonniernews/eslint-config`、`yarn add @bonniernews/eslint-config`、`bun add @bonniernews/eslint-config`

## README

# @bonniernews/eslint-config

[![Test application](https://github.com/BonnierNews/eslint-config/actions/workflows/run-tests.yml/badge.svg?branch=master)](https://github.com/BonnierNews/eslint-config/actions/workflows/run-tests.yml)

基础 [ESLint 语录](https://eslint.org/) 规则 [邦尼尔新闻](https://www.bonniernews.se/)配置与共同JS和ES6模块同时工作, 并且通过观察项目使用适当的设置 `package.json` [类型属性](https://nodejs.org/api/packages.html#type)。 。 。 .

对于支持它的节点版本(第16版及以上) `es2022` 环境也将被激活。 否则 `es2021` 将被使用.

> **说明:** 至3.X版本,此包被作为ES模块发布. 见 [使用示例](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-usage) 如何在无害环境管理项目和共同JS项目中使用.

## 目录

-   [@bonniernews/eslint-config](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-bonniernewseslint-config)
    -   [目录](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-table-of-contents)
    -   [使用量](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-usage)
        -   [配置所有规则](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-configuring-all-rules)
        -   [Java 脚本配置](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-javascript-configuration)
        -   [类型脚本配置](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-typescript-configuration)
        -   [反应配置](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-react-configuration)
        -   [测试配置](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-test-configuration)
        -   [输入的反应配置](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-typed-react-configuration)
        -   [全球忽略](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-global-ignores)
        -   [全球](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-globals)
    -   [安全规则](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-safety-rules)
        -   [每个规则的旗帜](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-what-each-rule-flags)
        -   [在适用规则的情况下](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-where-the-rules-apply)
        -   [你的项目需要什么规则](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-what-the-rules-need-from-your-project)
        -   [这些规则所看不到的](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-what-these-rules-cannot-see)
        -   [如果规则报告出问题](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-if-a-rule-reports-something-wrong)
    -   [从 2. X 迁移到 3. X](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-migrating-from-2x-to-3x)
    -   [从1.X迁移到2.X](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-migrating-from-1x-to-2x)
    -   [运行 Eslint](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-running-eslint)
    -   [现有项目中的使用](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-usage-in-an-existing-project)
    -   [用于 Pretier](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-usage-with-prettier)
    -   [保存时启用格式](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-enable-format-on-save)
    -   [更改日志](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-changelog)
    -   [出版新版本](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-publishing-a-new-version)
    -   [许可证](https://npmcn.com/package/%40bonniernews/eslint-config/#readme-license)

## 使用量

安装 `eslint` 财务报告和审定财务报表 `@bonniernews/eslint-config`数字 :

```bash
npm install --save-dev eslint @bonniernews/eslint-config
```

### 配置所有规则

配置所有规则,js,ts,tsx,jsx和测试规则.

**无害环境管理** - 与 `"type": "module"` 内 `package.json`数字 :

```javascript
// eslint.config.js
import config from "@bonniernews/eslint-config";

export default config;
```

**常见JS** - 无 `"type": "module"`数字 :

```javascript
// eslint.config.js
const { default: config } = await import("@bonniernews/eslint-config");

module.exports = config;
```

### Java 脚本配置

```javascript
// eslint.config.js
import config from "@bonniernews/eslint-config/js";

export default [ config ];
```

### 类型脚本配置

```javascript
// eslint.config.js
import config from "@bonniernews/eslint-config/ts";

export default [ config ];
```

### 反应配置

```javascript
// eslint.config.js
import config from "@bonniernews/eslint-config/jsx";

export default [ config ];
```

### 测试配置

添加有用的插件和全域器,用于用mocha-cakes-2 + chai进行测试.

对于 JavaScript 测试:

```javascript
// eslint.config.js
import config from "@bonniernews/eslint-config/test-js";

export default [ config ];
```

用于类型脚本测试 :

```javascript
// eslint.config.js
import config from "@bonniernews/eslint-config/test-ts";

export default [ config ];
```

### 输入的反应配置

```javascript
// eslint.config.js
import config from "@bonniernews/eslint-config/tsx";

export default [ config ];
```

### 全球忽略

要激活此配置( 除其它配置外, 单独使用此配置没有意义), 添加以下内容:

```javascript
// eslint.config.js
import ignores from "@bonniernews/eslint-config/ignores";

export default [
  ...allYourGoodConfigs,
  ignores,
  // your additional config
];
```

### 全球

用于浏览器等可能需要的全局程序.

```javascript
// eslint.config.js
import globals from "@bonniernews/eslint-config/globals";

export default [
  ...allYourGoodConfigs,
  { files: [ "assets/scripts/**/*.js" ], languageOptions: { globals: globals.browser } },
];
```

## 安全规则

一个测试套件,可以将其配置确定为真实环境,可以到达环境的 数据,而一个重设的帮助者指向它,将做它被要求做的. 防止这种情况的控制措施 住在此软件包外: 网络守护是 [`@bonniernews/stayput`](https://github.com/BonnierNews/stayput)环境针是 无导入文件 您的测试跑道负载首先, 最后一个防线是数据库角色 不能掉任何东西.

这包装的是一层 **其中一个缺失时通知**. 以下八条规则 带着您已经导入的配置来, 它们都是警告, 而且它们没有增加依赖性 。 处理 作为烟雾警报而不是锁:他们一次读一个文件的语法,所以他们抓住 普通的错误,而不是坚定的工作.

### 每个规则的旗帜

**`bn-safety/require-test-guards`** – 查看工程, 而不是文件: 做任何加载 在测试开始之前 有什么能给环境带来麻烦的吗? 是这两个 阻止一个套房 解决它的配置 到一个真实的环境,然后到达它.

```js
// flagged      a project depending on pg whose runner loads only a setup file that sets NODE_ENV,
//              since exp-config prefers NODE_CONFIG_ENV and would ignore it
// not flagged  the same project once its setup list has "@bonniernews/stayput/register" and a file
//              containing process.env.NODE_CONFIG_ENV = "test"
```

**`bn-safety/gitignore-env`** - 没有任何 `.gitignore` 文件与寄存器根之间 排除 `.env`\* A类 `.env` 持有本地的证书, 一个不光彩的是一个 `git add .` 离开 从遥控器.

```js
// flagged      a .gitignore listing only node_modules
// not flagged  .env, /.env, .env*, *.env or **/.env, in any .gitignore up to the root
```

**`bn-safety/env-pin-must-not-import`** —— 标定测试环境的文件不能导入 任何东西。 导入在其它文件之前运行, 因此导入的模块读取环境 首先从壳中漏出的东西中解开它的配置,而针则应用 时间太晚.

```js
// flagged
import nock from "nock";
process.env.NODE_CONFIG_ENV = "test";

// not flagged: the same two lines in two files, with the import-free pin loaded first
import { createHash } from "node:crypto";      // Node's own modules cannot read the config
beforeEach(() => (process.env.NODE_ENV = "development"));  // a test toggling a branch, not a pin
```

只有模块上层的任务才算作接针.

**`bn-safety/no-env-pin-tampering`** - 开关可以扩大网络守卫,或者让真实存在 环境变量覆盖测试配置, 属于审查者看到的工作流程文件中 他们和整个舰队的grep发现了他们。 从代码设定它们都是隐形的.

```js
// flagged
process.env.STAYPUT_ALLOW = "db.prod.example.com";
process.env.ALLOW_TEST_ENV_OVERRIDE = "1";
stayput.enable({ allow: [ "db.prod.example.com" ] });

// not flagged
process.env.ALLOW_TEST_ENV_OVERRIDE = "";       // the pin file turning it off
process.env.NODE_CONFIG_ENV = "test";           // the pin doing its job
```

**`bn-safety/no-remote-db-target`** 测试可能只到达这台机器 标记数据库、缓存或 经纪人主机在测试文件中拼出, 以及关闭 TLS 证书验证的两种方式, 这是在对真正的基础设施进行测试时通常采取的步骤.

```js
// flagged
"postgres://orders-db.prod.example.com:5432/orders"
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
{ rejectUnauthorized: false }

// not flagged
"postgres://localhost:5432/orders_test"          // this machine
"postgres://postgres:5432/app_test"              // a compose or CI service
`postgres://${config.dbHost}/orders`             // value not knowable at lint time
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "1";  // the safe direction
```

**`bn-safety/no-credentials-in-source`** - 证书属于机密或秘密管理人员。 写入 进入源文件,从那时起,无论文件发生什么,它们都在仓库的历史中 后来.

```js
// flagged
"postgres://svc_orders:s3cret-value@db.prod.example.com:5432/orders"
`mongodb+srv://${user}:${password}@cluster0.mongodb.net/app`
a PEM "BEGIN ... PRIVATE KEY" header
{ password: "a-real-looking-password" }              // also as a class field

// not flagged
"postgres://orders:orders@localhost:5432/orders_test"   // local credentials
"postgres://username:password@db.example.com/orders"    // documentation placeholders
{ secret: "The shared secret is set per environment" }  // prose, not a secret
{ password: "test" }                                    // too short to be real
{ accessToken: "fake-access-token" }                    // a placeholder word marks a fixture
```

一个被标记的固定 看起来像一个真正的证书。 为了保持它,做固定 在值中可见:设置一个占位词,例如 `fake`, (中文(简体) ), `dummy`, (中文(简体) ), `test`, (中文(简体) ), `example` 或者说 `replaced` 以它为自己的部分`fake-access-token`, (中文(简体) ), `REPLACED_BY_ENV`, (中文(简体) ), `test_key`),或保留 它短于12个字符。 真正的秘密在其中没有文字,所以这没有任何损失.

**`bn-safety/no-widened-nock`** ——在一个嘲弄http 有"点"的套房里,点"点"是保持请求的 在这个机器上。 通话 `enableNetConnect` 没有真正的允许列表 手拿回来.

```js
// flagged
nock.enableNetConnect();       // nothing is restricted
nock.enableNetConnect("");     // matches every host
nock.enableNetConnect(/.*/);   // same, written as a pattern

// not flagged
nock.enableNetConnect(/(localhost|127\.0\.0\.1):\d+/);
```

**`bn-safety/no-dotenv-override`** - dottenv's (英语) `override` 选项替换已经存在的变量 设置,包括刚刚应用的测试跑取器所设置的针. 没有它,dottenv 离开存在 单是变数 便能活下来.

```js
// flagged
dotenv.config({ override: true });
require("dotenv").config({ override: 1 });   // truthy counts

// not flagged
dotenv.config();
dotenv.config({ override: false });
telemetry.config({ override: true });        // not dotenv
```

### 在适用规则的情况下

阅读测试文件的规则适用于以下文件: `test/`, (中文(简体) ), `tests/`, (中文(简体) ), `spec/` 财务报告和审定财务报表 `__tests__/`,以及 到命名的文件 `*.test.js` 或者说 `*.spec.js`,在"JavaScript"和"TypeScript"中相同.

`require-test-guards` 财务报告和审定财务报表 `gitignore-env` 而不是看项目。 他们保持沉默,除非 `package.json` 依赖于数据库、缓存或信件代理客户端,它们报告 **单次 项目** 而不是每个测试文件一次。 图书馆没什么可保护的 所以没有要求它 安装一个警卫.

`require-test-guards` 和摩卡无关 研究出项目用在哪个跑者身上 依赖及其npm测试脚本,然后读取跑者设置:

| 运行者 | 在它看起来 |
| --- | --- |
| 摩卡岛 | `.mocharc.*`,则 `mocha` 键入 `package.json` |
| 欢笑 | `jest.config.*`,则 `jest` 键入 `package.json` |
| 测试 | `vitest.config.*`, (中文(简体) ), `vite.config.*` |
| 阿瓦( ava ) | `ava.config.*`,则 `ava` 键入 `package.json` |
| 窃听 | `.taprc*`,则 `tap` 键入 `package.json` |
| `node --test` | npm 测试脚本, 这是其预装值唯一可以活的地方 |

Npm测试脚本是读的 无论跑者,所以一个警卫预装 `--import` 或者说 `NODE_OPTIONS` 有数,同样 `NODE_CONFIG_ENV=test` 写在跑者面前. 运行者设置列表中的相对路径被遵循, 因此您自己的设置文件导入的守护符 也算数.

**不在那张桌子上的跑者意味着沉默,而不是警告.** 如果你的回购使用了什么 换句话说,规则上只字不提猜测, 加上一个跑者就是几行 `safety-plugin.js`这份清单永远不会完整,这就是为什么沉默是正确的失败.

完全不取决于桌子的 是停留量自己的 `assertActive()`一个检验标准是: 守护器被装入任何运行器和配置格式,然后它 **套房失败** 改为 警告——执行而不是引导。 如果你想要确定性,测试就是杠杆; 这些规则是提醒那些从未加过它的东西.

### 你的项目需要什么规则

这一切都在 [节点启动程序](https://github.com/BonnierNews/node-starterapp) 模板,以及 合并模板是满足这些规则的最简单方法:

-   `@bonniernews/stayput/register` 在你的跑者设置列表中—— `require` 列表中 `.mocharc.json`, (中文(简体) ), `setupFiles` 在嬉戏或恶作剧中, `--import` 编号 `node --test` 命令 - 或由该列表中的文件导入.
-   从设置列表中装入的无导入文件 `process.env.NODE_CONFIG_ENV = "test";`。必须是以下变量: `exp-config` 更喜欢它 `NODE_ENV`,所以只倾斜 `NODE_ENV` 仍然装入生产配置 `NODE_CONFIG_ENV` 从外壳里漏出.
-   `.env` 内 `.gitignore` (单位:千美元)`.env`, (中文(简体) ), `.env*`, (中文(简体) ), `*.env` 财务报告和审定财务报表 `**/.env` ),没有生产主机 或证书在该文件中.
-   测试运行在这个机器上的数据库. 发布容器端口到 `127.0.0.1` 而不是说 通过自己的地址到达容器.

### 这些规则所看不到的

值得一提,所以没人会误用绿色的药剂来保证:

-   **他们可以关闭.** 任何还款都可以设定为 `"off"` 它本身 `eslint.config.js`这些 规则引导,它们不执行。 执行的控制是连接时间和 数据库在服务器中的角色.
-   **一个来自配置的主机是无形的**这才是最重要的 A 类 字义 `postgres://orders-db.prod.example.com/orders` 在试验中报告; `` `postgres://${config.dbHost}/orders` `` 不能在这里评判,而是故意孤立无援. 只有留点才能看到实际拨号的宿主.
-   **只有可变任务的平面形状才被识别出.** `process.env.X = …`, (中文(简体) ), `process.env["X"] = …` 财务报告和审定财务报表 `globalThis.process.env.X = …` 是否为; `const { env } = process` 财务报告和审定财务报表 `Object.assign(process.env, …)` 没有.
-   **`eslint --cache` 隐藏工程检查 .** 缓存文件从未提交规则,所以删除 在测试文件更改之前,从跑道配置中调取的警卫不报告。 运行在 CI 中不包含 `--cache` 如果你依赖 `require-test-guards`。 。 。 .
-   **一个在项目外加载的警卫 似乎不见了.** `require-test-guards` 读取 运行配置, 它装入的文件和 npm 测试脚本 。 一个被注射的警卫 `NODE_OPTIONS` 在工作流程文件中,或者在代码中构建其设置列表的跑者配置,从 所以规则可以报告一个事实上被看守的项目.
-   **只有JavaScript和TypeScript被内嵌.** 一个秘密 `.env`输入 `config/production.json`输入 a Terraform变量文件或承诺的服务账户密钥中,任何规则都看不见. 这需要CI中的文件扫描仪,加上GitHub秘密扫描和推出保护,这也是 只有一层在秘密到达遥控器前就停止了.
-   **一条生产通道 `localhost` 看起来像本地** 对于这些规则的每一条,它所做的 留下来 数据库的作用是剩下的.

### 如果规则报告出问题

在此打开一个问题或拉动请求 。 如果您同时需要继续前进, 请禁用规则 所以下一个读者知道为什么:

```javascript
// eslint-disable-next-line bn-safety/no-remote-db-target -- mocked by nock, see BN-1234
```

一项请求:当一项测试失败,因为中止输入拒绝连接,或其中一项规则报告说 这台机器之外的主机,目标通常是问题而不是警卫. 把目标修好 而不是扩大戒备,让任何人决定任何例外.

## 从 2. X 迁移到 3. X

3.X版本作为ES模块(ESM)发布.

### 用于无害环境管理项目 `import`

如果你的项目 `"type": "module"` 内 `package.json`你已经在使用 `import`,那么你不需要做任何改变.

### 通用JS项目使用 `require`

如果你的项目没有 `"type": "module"`,您需要使用动态 `import()` 导入一个无害环境管理模块,这是一个同步函数:

**在(2.X)之前:**

```javascript
"use strict";

const config = require("@bonniernews/eslint-config");

module.exports = [
  ...config,
  { ignores: [ "dist/**" ] },
]
```

**在(3.X)之后:**

```javascript
const { default: config } = await import("@bonniernews/eslint-config");

module.exports = [
  ...config,
  { ignores: [ "dist/**" ] },
]
```

## 从1.X迁移到2.X

2.X引入了有不同配置格式的eslint 9. 建议阅读 [埃斯林特移民指南](https://eslint.org/docs/latest/use/configure/migration-guide)。 。 。 .

从Eslint 8 的一个重大变化是,只有一个 `eslint.config.js` 将使用文件, 将一个特定的配置文件放在文件夹中, 将不会在相同的情况下进行 和从根文件夹中继承配置的 8 一样,新建议是只拥有一个 `eslint.config.js` 位于根部 数据库.

Eslint 8的一个主要变化是,要使忽略成为全球性的,需要在根部一级增加一个单一的配置。 如果你只是用 `@bonniernews/eslint-config` 您将包含它,但如果您要构建自己的一套规则,您需要手动将其添加到您的配置文件中, 否则 eslint 将运行在 terraform 目录中的文件上 .

不同的规则集改变了名称和行为:

-   `@bonniernews/eslint-config` 将导入配置并将其应用到相应的目标
-   `@bonniernews/eslint-config/js` js 文件配置
-   `@bonniernews/eslint-config/ts` ts 文件配置
-   `@bonniernews/eslint-config/jsx` jsx 文件配置
-   `@bonniernews/eslint-config/tsx` tsx 文件配置
-   `@bonniernews/eslint-config/test-js` 使用 mocha- cakes-2 和 chai 来配置测试 js 文件
-   `@bonniernews/eslint-config/test-ts` 使用 mocha- cakes-2 和 chai 来配置测试 ts 文件
-   `@bonniernews/eslint-config/ignores` 全球忽略

## 运行 Eslint

运行方式 :

```bash
npx eslint .
```

## 现有项目中的使用

-   我们建议删除任何 `husky` 使用库诸如 `pretty-quick` 从你的 `package.json`
-   随后删除任何使用 `pretty-quick` 如果可能的话.
-   删除任何先前使用可锯齿 [_ESLint 语录_ 配置](https://eslint.org/docs/developer-guide/shareable-configs) 从 `package.json`,即:
    -   `eslint-config-airbnb`
    -   `eslint-config-google`
    -   `eslint-config-prettier`
-   删除 `eslint-plugin-prettier` 从 `package.json`
-   如果您遇到与下文类似的错误,请更新 `eslint` 依赖性.
    -   _没有找到规则“ 不非正则- 十进制- 例外” 的定义_
    -   _没有找到“不安全选择链”规则的定义_
-   如果您仍有问题; 尝试更新 `npm` (如果使用的话) _数字_ `nvm install-latest-npm`),(A) `prettier` 不错
-   移除任何“ lint- disable- line 不使用表达式” 指令, 因为 chai 断言, 它们不是 现在需要( e)`eslint-plugin-chai-friendly` 用于测试).
-   删除任何与 `mocha-cakes-2` 在您的测试配置中, 它们已经存在 输入 `@bonniernews/eslint-config/test-js` 财务报告和审定财务报表 `@bonniernews/eslint-config/test-ts` 相会相会.

完成上述步骤后,以下操作:

```sh
npx eslint . --fix
```

## 用于 Pretier

如果你想使用的话 _高级_在埃斯林特之前运行。 ESLint应该是最后的法官,即跑:

```sh
npx prettier --write .
npx eslint . --fix
```

这将按照 _高级_ 和装扮.

## 保存时启用格式

-   [视觉工作室代码](https://npmcn.com/package/%40bonniernews/eslint-config/EDITORS.md#visual-studio-code)

## 更改日志

可见 [这里](https://npmcn.com/package/%40bonniernews/eslint-config/CHANGELOG.md)。 。 。 .

## 出版新版本

我们自动向国家预防机制和GitHub两家发布,当你的版本被套装起来

## 许可证

释放 [麻省理工学院许可证](https://tldrlegal.com/license/mit-license)。 。 。 .

## 常见问题

### @bonniernews/eslint-config 是什么？

ESLint 配置

### 如何安装 @bonniernews/eslint-config？

在项目目录运行 npm install @bonniernews/eslint-config，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：eslint（\>=9\.19\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @bonniernews/eslint-config 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/bonniernews\_\_eslint-config 是否存在。

### @bonniernews/eslint-config 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @bonniernews/eslint-config 需要什么版本的 Node\.js？

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

### @bonniernews/eslint-config 可以商用吗？

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

### @bonniernews/eslint-config 的下载量有多少？

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

### @bonniernews/eslint-config 还在维护吗？

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

