@bonniernews/eslint-config
基础 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 --test | npm 测试脚本, 这是其预装值唯一可以活的地方 |
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/jsjs 文件配置@bonniernews/eslint-config/tsts 文件配置@bonniernews/eslint-config/jsxjsx 文件配置@bonniernews/eslint-config/tsxtsx 文件配置@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-airbnbeslint-config-googleeslint-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两家发布,当你的版本被套装起来
许可证
释放 麻省理工学院许可证。 。 。 .