@bonniernews/eslint-config

中文文档
3.1.0发布于 2026/09/22MITES Module构建来源已验证近 30 天下载 2.1万

ESLint 配置

中文使用文档
文档目录27 节
  1. 目录
  2. 使用量
  3. 配置所有规则
  4. Java 脚本配置
  5. 类型脚本配置
  6. 反应配置
  7. 测试配置
  8. 输入的反应配置
  9. 全球忽略
  10. 全球
  11. 安全规则
  12. 每个规则的旗帜
  13. 在适用规则的情况下
  14. 你的项目需要什么规则
  15. 这些规则所看不到的
  16. 如果规则报告出问题
  17. 从 2. X 迁移到 3. X
  18. 用于无害环境管理项目 import
  19. 通用JS项目使用 require
  20. 从1.X迁移到2.X
  21. 运行 Eslint
  22. 现有项目中的使用
  23. 用于 Pretier
  24. 保存时启用格式
  25. 更改日志
  26. 出版新版本
  27. 许可证

@bonniernews/eslint-config

Test application

基础 ESLint 语录 规则 邦尼尔新闻配置与共同JS和ES6模块同时工作, 并且通过观察项目使用适当的设置 package.json 类型属性。 。 。 .

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

说明: 至3.X版本,此包被作为ES模块发布. 见 使用示例 如何在无害环境管理项目和共同JS项目中使用.

目录

使用量

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

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

配置所有规则

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

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

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

export default config;

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

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

module.exports = config;

Java 脚本配置

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

export default [ config ];

类型脚本配置

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

export default [ config ];

反应配置

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

export default [ config ];

测试配置

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

对于 JavaScript 测试:

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

export default [ config ];

用于类型脚本测试 :

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

export default [ config ];

输入的反应配置

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

export default [ config ];

全球忽略

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

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

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

全球

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

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

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

安全规则

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

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

每个规则的旗帜

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

// 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 . 离开 从遥控器.

// 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 —— 标定测试环境的文件不能导入 任何东西。 导入在其它文件之前运行, 因此导入的模块读取环境 首先从壳中漏出的东西中解开它的配置,而针则应用 时间太晚.

// 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发现了他们。 从代码设定它们都是隐形的.

// 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 证书验证的两种方式, 这是在对真正的基础设施进行测试时通常采取的步骤.

// 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 - 证书属于机密或秘密管理人员。 写入 进入源文件,从那时起,无论文件发生什么,它们都在仓库的历史中 后来.

// flagged
"postgres://svc_orders:[email protected]: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:[email protected]/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 没有真正的允许列表 手拿回来.

// 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 离开存在 单是变数 便能活下来.

// 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 --testnpm 测试脚本, 这是其预装值唯一可以活的地方

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

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

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

你的项目需要什么规则

这一切都在 节点启动程序 模板,以及 合并模板是满足这些规则的最简单方法:

  • @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 看起来像本地 对于这些规则的每一条,它所做的 留下来 数据库的作用是剩下的.

如果规则报告出问题

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

// 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)之前:

"use strict";

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

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

在(3.X)之后:

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

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

从1.X迁移到2.X

2.X引入了有不同配置格式的eslint 9. 建议阅读 埃斯林特移民指南。 。 。 .

从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

运行方式 :

npx eslint .

现有项目中的使用

  • 我们建议删除任何 husky 使用库诸如 pretty-quick 从你的 package.json
  • 随后删除任何使用 pretty-quick 如果可能的话.
  • 删除任何先前使用可锯齿 ESLint 语录 配置 从 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 相会相会.

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

npx eslint . --fix

用于 Pretier

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

npx prettier --write .
npx eslint . --fix

这将按照 高级 和装扮.

保存时启用格式

更改日志

可见 这里。 。 。 .

出版新版本

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

许可证

释放 麻省理工学院许可证。 。 。 .

版本与发布记录

@bonniernews/eslint-config 共发布 28 个版本,首次发布于 2023/09/11;过去 12 个月发布了 5 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.1.0latest2026/09/221 个月前
3.0.02026/04/296 个月前
2.0.52026/04/206 个月前
2.0.42026/02/258 个月前
2.0.32025/12/0311 个月前
2.0.22025/03/051.7 年前

其他发布通道:alpha → 2.0.0-alpha.12。

关于 @bonniernews/eslint-config 的常见问题

@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 和提交记录判断。