ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从 1.0 到 15.0:eslint-config-airbnb-base 版本演进与规则集架构全解析

从 1.0 到 15.0:eslint-config-airbnb-base 版本演进与规则集架构全解析 Lint代码质量前端文档【免费下载链接】javascriptJavaScript Style Guide项目地址https://gitcode.com/GitHub_Trending/javascript12/javascript点击查看免费下载eslint-config-airbnb-base是 Airbnb JavaScript 风格指南JavaScript Style Guide的纯 JavaScript 基础 ESLint 共享配置不含 React 插件本文以仓库内 CHANGELOG.md 为骨架完整梳理该包自 1.0.0 至 15.0.0 的每一个版本节点、breaking 变更与规则启用历程并结合 index.js、legacy.js、whitespace.js 等入口源码与各规则文件讲清「ESLint 版本兼容策略、规则从严收紧的节奏、import 规则体系的建立、空白规则专项入口的由来」这四条主线。读完本文你将能读懂这份 CHANGELOG 背后每一行变更对应的源码依据也能据此判断在何种 ESLint/Node 环境下应采用哪个版本的配置。包结构与三个核心入口在进入版本史之前先建立对包结构的整体认识。本包是 monorepopackages/下与 eslint-config-airbnb 并列中的一个独立 npm 包其清单文件 package.json 声明了三个可直接被extends引用的入口并在 15.0.0 起通过exports字段显式导出所有子路径默认入口airbnb-base对应 index.js适用于 ES6ES2015 及以上extends了best-practices、errors、node、style、variables、es6、imports、strict八个规则模块并设置parserOptions.ecmaVersion: 2018、sourceType: module。airbnb-base/legacy对应 legacy.js面向 ES5 及以下环境预设browser node关闭no-var、prefer-object-spread并将comma-dangle收紧为never、strict设为safe。airbnb-base/whitespace对应 whitespace.js只把空白/格式类规则设为error其余一律降级为warn用于「先改空白、再改逻辑」的渐进式迁移。test/requires.js 用 tape 逐一验证这三个入口可被require而不会抛错test/test-base.js 则断言所有规则文件均不包含react/前缀规则与 react 插件这正是「base」区别于完整版eslint-config-airbnb的边界。15.0.02021-11-08拥抱 ESLint 8 的里程碑15.0.0 是 CHANGELOG 中最新的主版本也是理解后续所有版本的分水岭[breaking] drop eslint 7, add eslint 8 (#2495)彻底移除对 ESLint 6 及更早版本的支持package.json 中peerDependencies.eslint与 devDependencies 同时收紧为^7.32.0 || ^8.2.0。这是本项目历史上第二次「跟随 ESLint 大版本换代」的 breaking前一次是 12.0.0 强制要求 ESLint v4、14.2.0 开始支持 v7。[breaking] add exports在 package.json 中引入 Nodeexports字段将./legacy、./whitespace以及全部八个./rules/*子路径显式白名单化避免外部按任意路径深挖内部文件。[patch] Improve function-paren-newline with multiline-arguments option (#2471)细化多行函数参数换行的校验策略。[patch] update default value for complexity (#2420)对照 best-practices.js 中complexity: [off, 20]即圈复杂度默认阈值 20该规则本身仍为 off阈值仅作为建议参数保留。[patch] add disabled no-unsafe-optional-chaining rule、add no-nonoctal-decimal-escape rule新增两条核心规则并直接置为error——no-nonoctal-decimal-escape禁止字符串字面量中的\8/\9转义在 best-practices.js 中为errorno-unsafe-optional-chaining则以「添加但禁用」的方式预埋待后续版本评估后启用。[meta] use prepublishOnly script for npm 7发布脚本迁移为prepublishOnly流程为eslint-find-rules --unused检查未用规则npm testsafe-publish-latest保证每次发布前配置自洽。从源码角度看15.0.0 还同步更新了eslint-plugin-import等依赖并修正了若干文档拼写arthmetic - arithmetic、than拼写、HTTP HTTPS这些属于低风险但持续进行的工程质量维护。14.x2019–2020ESLint 7 兼容与规则选项细化14.x 系列共 3 个版本主题是「平稳兼容 选项级打磨」14.2.02020-06-10[new] add eslint v7首次纳入 ESLint 7 支持延续「新 ESLint 大版本发布后主动适配」的节奏。[minor] Disallow multiple empty lines配合 ESLint 新版no-multiple-empty-lines规则收紧空行数量。[patch] Include context exception for no-param-reassign (#2230)在 best-practices.js 的ignorePropertyModificationsFor白名单中加入context与已有的req/res/request/response/ctx/staticContext等一样服务于 Koa/Express/ReactRouter 等框架常见参数名。[patch] Allow triple-slash (///) comments (#2197)放宽对///注释的spaced-comment校验。[patch] Disable prefer-object-spread for airbnb-base/legacy (#2198)这正是 legacy.js 中prefer-object-spread: off的出处——ES5 环境无法使用对象展开语法。14.2.12020-11-06[base] no-restricted-globals: add better messages (#2320)为禁用全局变量提供更友好的报错文案。[base] add new core eslint rules, set to off新核心规则一律先置off观察。[deps] update confusing-browser-globals, object.assign继续借助confusing-browser-globals依赖自 13.2.0 起引入来维护浏览器全局变量黑名单。14.1.02020-03-12[minor] enable import/no-useless-path-segments for commonjs (#2113)对 CommonJS 场景启用无用路径片段检测。[fix] whitespace: only set erroring rules to warn修正 whitespace.js 的降级逻辑——仅把原本为error的规则降为warn不触碰本来就是off的规则。[patch] import/no-extraneous-dependencies: Support karma config files (#2121)扩展外置依赖豁免名单。[tests] re-enable eslint rule prefer-destructuring internally (#2110)测试代码自身恢复启用prefer-destructuring保证配置能约束自己的仓库代码。13.x2018–2019ESLint 5/6 适配与 import 规则强化13.2.02019-07-01[minor] Enforce dangling underscores in method names (#1907)no-underscore-dangle覆盖到方法名。[fix] disable no-var in legacy entry pointlegacy 入口继续允许varES5 无let/const。[deps] Switch to confusing-browser-globals (#1961)用独立包替代内置的浏览器混淆全局列表即当前 package.json 中唯一的 runtime dependency。[meta] add disabled prefer-named-capture-group rule同样先off预埋新规则。13.1.02018-08-13[new] add eslint v5 support (#1834)适配 ESLint 5。[new] update base ecmaVersion to 2018; remove deprecated experimentalObjectRestSpread option默认入口的parserOptions.ecmaVersion升到 2018见 index.js并删除已废弃的experimentalObjectRestSpread。13.0.02018-06-21一次大范围的 breaking 更新集中在 import 规则与代码风格上[breaking] enable import/no-cycle: warn on cyclical dependencies (#1779)、[breaking] Change import/no-self-import from off to error、[breaking] import/named: enableimport 规则体系全面从严。[breaking] order of import statements is ignored for unassigned imports (#1782)无绑定导入纯副作用导入不参与排序。[breaking] Update object-curly-newline、Prevent line breaks before and after 、enable implicit-arrow-linebreak、Enables nonblock-statement-body-position、Enables eslint rule for operator-linebreak、lines-between-class-members: always、no-else-return: disallow else-if格式类规则大收紧。[new] Adds config entry point with only whitespace rules enabled (#1749, #1751)whitespace 专项入口正是诞生于此版本其规则清单见 whitespaceRules.js约 50 条空白/换行/括号间距规则外加import/newline-after-import。[docs] add npx shortcut (#1694)README 开始推荐npx install-peerdeps快速安装。12.x2017–2018强制 ESLint v4 与一批新规则启用12.0.02017-09-02[deps] [breaking] require eslint v4强制升级并随之启用 ESLint 4 新增的一整批核心规则function-paren-newline、for-direction、getter-return、no-compare-neg-zero、semi-style、object-curly-newline、no-buffer-constructor、no-restricted-globals、switch-colon-spacing、template-tag-spacing、prefer-promise-reject-errors、prefer-destructuring同时改进indent、no-multi-spaces、no-trailing-spaces、no-underscore-dangle。[breaking] move comma-dangle to Stylistic Issues (#1514)尾逗号策略归入风格问题类别统一管理。[breaking] Rules prohibiting global isNaN, isFinite (#1477)禁用裸调用的isNaN/isFinite改推Number.isNaN/Number.isFinite——这一决策至今仍体现在 best-practices.js 的no-restricted-properties中对global、self、window三个对象上的isFinite/isNaN均给出替换建议。12.0.1 / 12.1.0修复indent对 JSX 元素的误报、跟随 ESLint 4.9 小版本。11.x2016–2017ESLint 3/4 双兼容期11.x 体现了 ESLint 大版本切换期的兼容策略11.3.02017-07-23[deps] allow eslint v3 or v4同时支持两代 ESLint新增no-return-assign强化与内联块注释间距规则no-restricted-globals开始加入混淆全局但暂缓启用leave disabled for now。11.2.0[minor] Disallow unused global variables。11.1.2no-param-reassign引入ignorePropertyModificationsFor如acc/accumulator等 reducer 累加器参数白名单。11.1.1no-unused-vars启用ignoreRestSiblings——解构 rest 剩余属性不再被误报为未使用。11.1.0启用no-multi-assign禁止链式多重赋值。11.0.02016-12-11[breaking] enable no-await-in-loopno-duplicate-imports因与import/no-duplicates重叠而禁用体现「以插件规则为准」的原则。10.0.0 之前2016从 ES5 遗产到 ES6 的基线确立早期版本奠定了今日风格指南的底色10.0.02016-11-06prefer ** over Math.pow指数运算符、comma-dangle: require trailing commas for functions、启用no-useless-return、收紧indent与spaced-comment、启用import/no-named-default同时以ignoreRegExpLiterals放宽max-len。9.0.02016-10-16ForOfStatement加入no-restricted-syntax启用import/no-webpack-loader-syntaxESLint 升到 3.8eslint-plugin-import 升到 v2#1101。8.0.02016-09-24启用no-restricted-properties、prefer-numeric-literals、lines-around-directive及 import 插件四条规则import/extensions、import/no-absolute-path、import/no-dynamic-require。7.2.02016-09-23ecmaVersion升到 2017启用对象 rest/spread。7.0.0style.js 加入no-plusplus见 rules/style.js。6.0.02016-09-06启用valid-typeofrequireStringLiterals、class-methods-use-this、symbol-description、no-bitwise、no-tabs、func-call-spacing、no-template-curly-in-stringecmaVersion升至 2016。5.0.02016-07-24启用import/newline-after-import及一大批被「遗漏」的既有规则linebreak-style、new-parens、no-continue、prefer-spread、no-path-concat、require-yield等并决定用off/warn/error字符串替代数字 0/1/2 以提升可读性——这一可读性约定沿用至今所有 rules 文件均如此书写。4.0.02016-07-02ESLint 升 v3、放弃 Node 4启用rest-spread-spacing、no-mixed-operators、no-prototype-builtins、no-useless-rename、unicode-bom等并将 import 规则独立成单独文件——这正是如今 rules/imports.js 的雏形。3.0.0 / 2.0.0 / 1.x2016-04~05启用import/no-mutable-exports、no-class-assign、no-unsafe-finally等1.0.x 多次「松绑」允许 null、允许break、允许空 class/object 方法体现配置从宽松到收紧的渐进节奏。四条演进主线与源码印证通读 CHANGELOG可以提炼出四条贯穿始终的主线跟随 ESLint 大版本4.0.0v3→ 9.0.03.8→ 12.0.0v4→ 13.1.0v5→ 14.0.0v6、弃 v4→ 14.2.0v7→ 15.0.0v8每次换代都会集中启用一批新核心规则。规则从严、新规则先 off 预埋大量[breaking] enable ...与add disabled ... rule并存反映「先预埋、观察稳定后再启用」的保守策略如no-unsafe-optional-chaining、prefer-named-capture-group。import 规则体系持续强化从 4.0.0 的独立文件到 13.0.0 全面启用no-cycle、no-self-import、import/named再到 14.1.0 的import/no-useless-path-segments与 rules/imports.js 一一对应。空白渐进迁移入口13.0.0 新增的whitespace入口whitespace.js whitespaceRules.js通过CLIEngine.getConfigForFile读取基准配置、将非空白规则批量降为warn让存量项目可以先统一格式再逐条清理逻辑问题。版本选择与安装使用建议根据 README.md 与 package.json选择版本时请对照你的 ESLint 版本ESLint 7.32.0 / 8.2.0 使用 15.0.0更早的 ESLint 请回退到 14.xv7、13.xv5/v6、12.xv4等对应版本。Node 引擎要求为^10.12.0 || 12.0.0。安装与接入当前仓库为只读以下命令在你的目标项目中执行# npm 5 一键安装自动解析 peerDependencies 版本 npx install-peerdeps --dev eslint-config-airbnb-base随后在.eslintrc中选择入口{ extends: airbnb-base }需要 ES5 兼容或纯空白渐进迁移时分别改用{ extends: airbnb-base/legacy } { extends: airbnb-base/whitespace }若项目使用.jsx/.mjs还需显式指定扩展名ESLint 默认只检查.jseslint . --ext .js, .jsx, .mjs最后本仓库的 test/requires.js 与 test/test-base.js 验证了所有入口可解析、且绝不引入 React 规则——这也是「base 版」与完整版eslint-config-airbnb的分工所在base 管好 JavaScript 本体React 相关规则交给上层配置。赞分享Lint代码质量前端文档【免费下载链接】javascriptJavaScript Style Guide项目地址https://gitcode.com/GitHub_Trending/javascript12/javascript点击查看免费下载相关推荐craft-agents-oss v0.7.3 版本深度解析OAuth 稳定性修复、后台任务 UI 与跨语言会话标题生成craft agents oss v0.7.3 版本深度解析OAuth 稳定性修复、后台任务 UI 与跨语言会话标题生成 导读 本文基于开源仓库 craftLint代码质量前端文档eslint-plugin-graphile-export 完全指南配置、六条规则与 1.0 版本演进全解析eslint plugin graphile export 完全指南配置、六条规则与 1.0 版本演进全解析 eslint plugin graphile e后端API网关commitlint/config-conventional 版本演进全解析从规则变迁到源码实现commitlint/config conventional 版本演进全解析从规则变迁到源码实现 本篇技术指南以 commitlint 仓库中 commi开发工具Lint代码质量创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表