@devenvy/代码指南
DevEnvy JavaScript、TypeScript和TypeScript共享的提示、格式、TypeScript、编辑器和 git基线 角地库. ECMAScript兄弟会 代码指南-多特网。 。 。 .
- ESLint 语录 一个
createConfig()调用: 核心、 字迹- slint( 类型意识) 、 导入命令 、, angular-eslint(TypeScript +模板)和Vitest,每个规则都明确决定. - 高级 ——为一切进行格式化;ESLint从不与之作对.
- tsconfig 基础 ——严格节点,浏览器,角和平面JavaScript的编译器设置.
- 国 际 —— 说
init设一回所,check在漂移或被削弱的配置上失败了,sync更新 管理的文件 .
快开始
# Plain JavaScript (browser)
pnpm add -D --allow-build '!unrs-resolver' @devenvy/code-guidelines eslint prettier knip
pnpm exec code-guidelines init --env browser --no-typescript
# Node / TypeScript
pnpm add -D --allow-build '!unrs-resolver' @devenvy/code-guidelines eslint prettier knip typescript typescript-eslint @types/node
pnpm exec code-guidelines init --env node
# Angular
pnpm add -D --allow-build '!unrs-resolver' @devenvy/code-guidelines eslint prettier knip typescript typescript-eslint angular-eslint
pnpm exec code-guidelines init --angular --prefix app
npm的操作方式相同(npm i -D …, (中文(简体) ), npx code-guidelines …) (中文(简体) ).
--allow-build '!unrs-resolver' 记录 pnpm 不运行安装脚本的决定
unrs-resolver (导入插件的解析器;它的预建二进制安装没有它). pnpm 失败
在未决定构建脚本时安装, 所以 init 另设 allowBuilds: unrs-resolver: false
内 pnpm-workspace.yaml (工作空间根的, 对于工作空间包) 除非它已经
true 或者说 false,以及 check 需要一个决定。 使用 pnpm 的项目 permissions
设置它在那里决定 init 财务报告和审定财务报表 check 离开文件.
一个项目只为它所使用的特性安装工具. 除了ESLint之外的一切 普雷蒂埃 且 knip 是一个可选的对等点, 只有在它的特性在 :
| 特性 | 安装 |
|---|---|
| 每个项目 | eslint, (中文(简体) ), prettier, (中文(简体) ), knip |
| 类型脚本( 默认) | typescript, (中文(简体) ), typescript-eslint |
角 (正数)--angular(中文(简体) ) | angular-eslint |
维特( V)--vitest(中文(简体) ) | @vitest/eslint-plugin |
init 打印缺失的安装命令,并打开特性
没有软件包, 命令运行失败 。 一个简单的 JavaScript 工程从不需要
类型脚本,只有一个例外: @vitest/eslint-plugin 在打字机的公用设施上,
因此,允许维特带 typescript ,作为该插件的依赖性(没有配置).
init 写道:
| 文件 | 什麽 |
|---|---|
eslint.config.mjs | createConfig({...}) 选择( 缺席时创建) |
tsconfig.json | 类型脚本工程: 扩展 @devenvy/code-guidelines/tsconfig/<base>.json; 现有选项正在迁移, 已经设置的选项已被删除 |
package.json | "prettier" 键,脚本(lint, (中文(简体) ), format, (中文(简体) ), format:check, (中文(简体) ), typecheck 用于类型脚本, knip, (中文(简体) ), guidelines:check, (中文(简体) ), test:ci 与 --vitest)和a 数据 codeGuidelines 你的选择记录 |
.nvmrc | 24 (缺席时创建) |
.editorconfig, (中文(简体) ), .gitattributes, (中文(简体) ), .gitignore, (中文(简体) ), .prettierignore | 管理区块; 保留您自己在区块外的内容 |
.vscode/extensions.json, (中文(简体) ), .vscode/settings.json | 推荐的扩展名和格式/固定保存密钥合并; 保留您的其他设置 |
pnpm-workspace.yaml | pnpm 项目 : allowBuilds 决定 unrs-resolver 如果缺少; 保留您的其他设置 |
现有 eslint.config.*, (中文(简体) ), .eslintrc*, (中文(简体) ), .prettierrc* 或者说 prettier.config.* 文件停止 init
在它写东西之前 重运行 --force 来代替他们.
ESLint 语录
// eslint.config.mjs
import { createConfig } from '@devenvy/code-guidelines/eslint';
export default createConfig(
{
rootDir: import.meta.dirname,
env: 'browser',
vitest: true,
angular: { prefix: 'app' },
},
// any extra flat configs are appended last
{ files: ['scripts/**'], rules: { 'no-warning-comments': 'error' } },
);
选项
| 选项 | 默认 | |
|---|---|---|
rootDir | 所需经费 | 根 tsconfig 的目录,通常 import.meta.dirname |
env | 所需经费 | 'browser' 或者说 'node' globals 用于源文件 。 根工具配置( R)*.config.*) 总是获得节点环球 |
typescript | true | 机型识别字体-斜体 .ts/.mts/.cts。 。 。 . false 用于平版 JavaScript (不需要类型Script 包) |
untypedFiles | [] | 每个 tsconfig 外的 TS 文件( 如. ['scripts/**']),无类型信息被闪烁. 根号 *.config.ts 文件总是未类型 |
vitest | false | true 或者说 { files }默认文件 : **/*.{spec,test}.{ts,mts,cts,js,mjs,cjs} |
angular | false | { prefix, controlComponents? }。 。 。 . prefix 是组件/方向选择器的字符串或数组. controlComponents 为标签协会列出自制形式控制的组件 |
importOrder.internal | [] | 额外的Regex来源作为内部进口处理,例如:. ['^@app/']。 。 。 . ^@devenvy/, (中文(简体) ), ^@/ 财务报告和审定财务报表 ^~/ 已建为 |
ignores | [] | 额外的全球忽略. dist, (中文(简体) ), coverage, (中文(简体) ), .angular, (中文(简体) ), out-tsc, (中文(简体) ), node_modules 财务报告和审定财务报表 *.min.js 总是被忽略 |
每个街区都被命名了 devenvy/<layer>/<part>; 使用 npx eslint --inspect-config 完全看出来
适用于文件的内容.
增加和放松规则
附加的配置可能开启共享配置所遗留的规则,或者提高严重程度.
code-guidelines check 失败于任何比共享配置更弱的东西( 请参见 国 际因此,一个
规则只有在审查中可见的情况下才放宽:
- 单行:
// eslint-disable-next-line <rule> -- <reason>(未使用的禁用是错误); - 生成或销售的文件:
ignores选项; - 在所有 tsconfig 外输入脚本文件:
untypedFiles选项.
执行什么
规则表 src/eslint/rules 是有效的配置 :
每条规则 每一个插件船 都按其严重性列出 令人惊讶 offs 带一个理由。 A 类
规则一个更新的插件版本添加到您的项目中, 直到此软件包的发布决定为止
这个 要点 :
- 保证安全
no-floating-promises, (中文(简体) ),no-misused-promises, (中文(简体) ),await-thenable页:1no-unsafe-*家庭 家庭 家庭,no-explicit-any, (中文(简体) ),no-unnecessary-condition, (中文(简体) ),no-deprecated。 。 。 . no-magic-numbers(忽略 - 1, 0, 1, 数组索引, 默认值, 缩略语和只读类) 属性);在测试和根工具配置中放松.- 角: OnPush,信号(
prefer-signals, (中文(简体) ),prefer-output-emitter-ref, (中文(简体) ),inject()在顶上, 控制流,模板访问. 无文件名后缀假设: Angular 20+ 无后缀文件 (单位:千美元)user-profile.ts) 与*.component.ts。 。 。 . - 进口订单 内建 外建 外建 内建 外建 外建 外建 外建 外建 外建 外建 外 外 外 外 外 外 外 外 外 外 外 外 外 外 外 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相 相
(单位:千美元)
import-x/no-cycle,使用 TypeScript 解析器).
只有这些层才会关闭规则 : no-undef 用于TS文件,无类型文件,测试文件放松,
财务报告和审定财务报表 eslint-config-prettier (与 curly (原始内容存档于2019-10-21). re-unitation.
高级
{ "prettier": "@devenvy/code-guidelines/prettier" }
角项目使用情况 @devenvy/code-guidelines/prettier/angular,用于格式 *.html 与
angular 剖析器( 纯度仅推断为 *.component.html) (中文(简体) ).
选项 : printWidth: 100, (中文(简体) ), singleQuote: true, (中文(简体) ), trailingComma: "all", (中文(简体) ), endOfLine: "lf"· ;
其他一切都是Pretier的默认.
类型脚本
// tsconfig.json
{ "extends": "@devenvy/code-guidelines/tsconfig/node.json", "include": ["src"] }
| 基础 | 添加数 |
|---|---|
base.json | strict, (中文(简体) ), noImplicitOverride, (中文(简体) ), noImplicitReturns, (中文(简体) ), noFallthroughCasesInSwitch, (中文(简体) ), noPropertyAccessFromIndexSignature, (中文(简体) ), noUncheckedIndexedAccess, (中文(简体) ), isolatedModules, (中文(简体) ), skipLibCheck, (中文(简体) ), forceConsistentCasingInFileNames, (中文(简体) ), target: ES2022 |
node.json | module编号 :moduleResolution: nodenext, ES2023, (英语), types: ["node"] |
browser.json | module: preserve, (中文(简体) ), moduleResolution: bundler,DOM 自由号 |
angular.json | 浏览器 + experimentalDecorators, (中文(简体) ), importHelpers,以及 angularCompilerOptions strictTemplates, (中文(简体) ), strictInjectionParameters, (中文(简体) ), strictInputAccessModifiers |
js.json | allowJs, (中文(简体) ), checkJs, (中文(简体) ), noEmit 用于使用 JSDoc 类型检查平版JavaScript 。 未设置 init: 通过安装选择加入 typescript 并延长时间 |
类型脚本 ~6.0: typescript-eslint和角编译器尚不支持TypeScript 7.
国 际
code-guidelines check # read-only; exit 1 with a diff on any drift
code-guidelines sync --dry-run # show what sync would change
code-guidelines sync # rewrite managed blocks and keys from the installed version
除了管理好的区块和钥匙, check 比较实际执行的内容和此软件包:
- ESLint 语录: 每张
.js编号 :.mjs编号 :.cjs编号 :.ts编号 :.mts编号 :.cts编号 :.html文档,项目解决 配置( n)eslint.config.*,随着ESLint装入它)相对createConfig与项目本身 选项。 共享配置插件的文件不能被忽略, 它打开的每个规则必须保留 及其分解器、处理器和网际 选项不得被替换。 选项必须匹配codeGuidelines选择. - 类型脚本: 每一个
tsconfig*.json必须扩展一个被包装的基数(直接或通过其他 tsconfigs, 相对或从一个软件包), 并且没有人可以关闭基础打开的检查 (单位:千美元)strict和它暗示的每个旗帜,noUncheckedIndexedAccess和角质strictTemplates家庭事务. - 高级数字 :
package.json#prettier在此软件包中点数,不存在其他 Pretier 配置.
不包括的: eslint-disable 批注(每个批注在使用时可见,未使用)
以及CI是否真的运行这些脚本.
稍后更改选择,请编辑 codeGuidelines 内 package.json (它选择管理内容,例如
作为 Angular VS 代码扩展)并 eslint.config.mjs (它选择了 lint 行为),然后运行
code-guidelines sync。 。 。 .
除了代码指南-多特网
在全速的重播中 两个软件包管理 .editorconfig。这个包只拥有它的标记块,
首先放在后面各节(例如: [*.cs])优先,写作 root = true 仅在
没有 root 线条存在.
CI和释放
每个repo拥有自己的工作流程(没有共享/可再使用的工作流程). Devenvy CI公约 风暴观察 作为参考设置,本文介绍 未选中: 工作流程每回波不同, 静态检查无法区分工作 这没什么用.
ci.yml(充电请求和每周运行一次),每个工作一个:lint数字 :guidelines:check, (中文(简体) ),lint, (中文(简体) ),format:check, (中文(简体) ),typecheck(TypeScript项目),knip(未使用的文件、导出和依赖), 动作lint 财务报告和审定财务报表 齐兹莫尔语name (GitHub Actions security) (吉特Hub动作安全).test数字 :test:ci包含覆盖阈值和公关摘要.build,加repo特定工作(例如容器烟雾测试,或包件检查).audit:生产依赖性审计,关于拉动请求的信息.dependency-review: 未能在程序外添加脆弱依赖或许可证的公关 允许列表.dependabot-auto-merge,以及result,它需要所有其他工作 并且是唯一一个 需要检查状态.
scorecard.yml数字 : OpenSSF 计分卡 推进到main周报. 它自己的工作流程,因为出版结果限制了工作流程可能包含的其他内容.codeql.yml: 代码和工作流程上的代码QL(actions, (中文(简体) ),javascript-typescript与security-and-quality查询,根据拉动请求,main周报 一个工作流程而不是 GitHub 的工作流程 默认设置,所以查询和语言都在寄存器中main规则要求 结果。 (转出默认设置: GitHub 拒绝一个工作流程的运行结果 。)SECURITY.md: 支持的版本和与私人脆弱性报告的联系(可在 仓库设置)..github/dependabot.yml用7天冷却.- Bot 动作( Dependabot auto- immerge) 作为 Devenvy- bot GitHub App 运行—— org 变量
DEVENVY_BOT_CLIENT_ID, org 密语DEVENVY_BOT_PRIVATE_KEY两者都作为Deptabot秘密—— 因此合并触发工作流程main,哪个GITHUB_TOKEN合并不会。 每个符号 只请求其步骤需要的许可.
Repo出版如何是自己的选择. 正在使用的两种样式, 都运行 CI
并证明他们发表的内容(建立出处,SPDX SBOM通过 pnpm sbom:
- 最近来自
main(应用程序,例如:风暴观察):每次推向main部署现场并推进 容器图像为latest财务报告和审定财务报表sha-<commit>合并到快速相继队列中,所以 最新的main在进行中后部署。 版本发布是可选的. - 手工切割的释放 (npm软件包,例如这个软件包): 发布一个 GitHub 发布 -
gh release create v1.2.0 --target main --generate-notes,或发布页——出版 版本(npm 软件包及其版本从标签中设定,图像为X.Y.Z财务报告和审定财务报表X.Y, (中文(简体) ), (b) 释放资产.
覆盖需要维特的 json-summary 财务报告和审定财务报表 json 记者; 在测试配置中设定阈值
测试本身在覆盖下降时失败.
变动
每个版本中的变化都在 发布注释。 。 。 .
许可证
麻省理工学院