1import{_ as a,c as i,a2 as n,o as p}from"./chunks/framework.CQii86iU.js";const c=JSON.parse('{"title":"å端工ç¨å","description":"","frontmatter":{},"headers":[],"relativePath":"docs/frontEngineering/项ç®é ç½®.md","filePath":"docs/frontEngineering/项ç®é ç½®.md","lastUpdated":1748188446000}'),l={name:"docs/frontEngineering/项ç®é ç½®.md"};function e(t,s,h,k,r,E){return p(),i("div",null,s[0]||(s[0]=[n(`<h1 id="å端工ç¨å" tabindex="-1">å端工ç¨å <a class="header-anchor" href="#å端工ç¨å" aria-label="Permalink to "å端工ç¨å"">â</a></h1><h2 id="editorconfig" tabindex="-1">EditorConfig <a class="header-anchor" href="#editorconfig" aria-label="Permalink to "EditorConfig"">â</a></h2><p>EditorConfigæ¯ç¼è¾å¨çº§å«çï¼éè¿å¨é¡¹ç®ä¸æ·»å é ç½®æä»¶<code>.editorconfig</code>ï¼EditrConfigæä»¶è¯»åé ç½®æä»¶ï¼å¹¶æ ¹æ®é ç½®æä»¶æ¥è®¾ç½®ç¼è¾ç设置</p><div class="language-editorconfig vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">editorconfig</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>root = true #è¡¨ç¤ºæ¯æé¡¶å±çé ç½®æä»¶ï¼è®¾ä¸º true æ¶ï¼åæ¢å䏿¥æ¾</span></span> 2<span class="line"><span></span></span> 3<span class="line"><span>[*]</span></span> 4<span class="line"><span>charset = utf-8 # ç¼ç å符é</span></span> 5<span class="line"><span>indent_style = space #设置缩è¿ä¸º tab æ space ãå¦æä¸ºtabï¼è¾å ¥tabåç°ä¸ºä¸ºindent_sizeä¸ªç©ºæ ¼ï¼å®é 䏿¯æ·»å å¶è¡¨ç¬¦ï¼å¦æä¸ºspaceï¼ä¼ætabæ¿æ¢ä¸ºindent_sizeä¸ªç©ºæ ¼</span></span> 6<span class="line"><span>indent_size = 2 #è®¾ç½®ç¼©è¿æå åæ°</span></span> 7<span class="line"><span>end_of_line = lf #设置æ¢è¡ç¬¦ï¼å¼ä¸ºlfãcråcrlf</span></span> 8<span class="line"><span>insert_final_newline = true #设为 true 表示使æä»¶ä»¥ä¸ä¸ªç©ºç½è¡ç»å°¾</span></span> 9<span class="line"><span>trim_trailing_whitespace = true #设为 true 表示ä¼å»é¤è¡å°¾ç空ç½å符</span></span> 10<span class="line"><span></span></span> 11<span class="line"><span>[*.md]</span></span> 12<span class="line"><span>insert_final_newline = false</span></span> 13<span class="line"><span>trim_trailing_whitespace = false</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><p>注æï¼</p><ul><li><p>vscodeéè¦å®è£ æä»¶ï¼æä¼åºç¨é ç½®æä»¶çè§å</p><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/20230825174640%20.png" alt="image-20230825174639784"></p></li></ul><h2 id="eslint" tabindex="-1">ESlint <a class="header-anchor" href="#eslint" aria-label="Permalink to "ESlint"">â</a></h2><p>éè¿ä½¿ç¨ESlint对代ç è´¨éè¿è¡æ£æ¥ï¼ESLint乿é¨åé ç½®ï¼æ¯é对äºä»£ç 飿 ¼çï¼</p><p><a href="https://eslint.nodejs.cn/" target="_blank" rel="noreferrer">ESLint䏿ç½</a></p><h3 id="æ´ä½è®¤è¯" tabindex="-1">æ´ä½è®¤è¯ <a class="header-anchor" href="#æ´ä½è®¤è¯" aria-label="Permalink to "æ´ä½è®¤è¯"">â</a></h3><ul><li><p>ESLintå </p><p>代ç è´¨éæ£æ¥çå·¥å ·ï¼éè¦éè¿npmä¸è½½å°é¡¹ç®ä¸ï¼éè¿å½ä»¤è§¦åä»£ç æ£æ¥ãä¿®å¤</p></li><li><p>ESLintæä»¶</p><p>ä¾èµäºESlintå ï¼å å¨é¡¹ç®ä¸å®è£ ESlintå ï¼æè½å®ç°å ¶åè½ã</p><p>Eslintå æå ·æå¯¹ä»£ç è¿è¡æ£æ¥çåè½ï¼èEslintæä»¶ä» ä» æ¯åç¼è¯å¨ç»åèµ·æ¥ï¼å°æ£æ¥åºæ¥çé®é¢å¨ç¼è¾å¨ä¸ååºæç¤ºï¼è§ä¸å¾ï¼ççåè½ã</p><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/20221030162602%20.png" alt="image-20221030162601887"></p><p>æä»¬è½å¤éè¿ç¼è¯å¨å¯¹ESlintæä»¶è¿è¡è®¾ç½®ï¼è°æ´è§¦åESLintæ£æ¥çæ¶æºï¼å¯ä»¥è®¾ç½®ä¿åèªå¨è§¦åï¼</p></li><li><p>ESLinté ç½®æä»¶</p><p>æ¨è为ä¸é¢æ ¼å¼</p><div class="language-text vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">text</span>
13<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span></span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></li></ul><p>eslint.config.ts eslint.config.js</p><div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span></span></span> 14<span class="line"><span>### åä¸ä»ç</span></span> 15<span class="line"><span></span></span> 16<span class="line"><span>ESLintä¹åæJSLintåJSHintï¼ä¹æä»¥ESLintè½å¤§ç«æ¯å 为 ES6 çåºç°ãES6 åå¸åï¼å 为æ°å¢äºå¾å¤è¯æ³ï¼JSHint çæå æ æ³æä¾æ¯æï¼èä»ä¸é¢çåçåæï¼æä»¬å°±è½ç¥é ESLint åªéè¦æåéçè§£æå¨å°±è½å¤è¿è¡ lint æ£æ¥ã彿¶ babel 为 ESLint æä¾äºæ¯æï¼å¼åäº babel-eslintï¼è®©ESLint æä¸ºæå¿«æ¯æ ES6 è¯æ³ç lint å·¥å ·</span></span> 17<span class="line"><span></span></span> 18<span class="line"><span>### ç»èå¦ä¹ </span></span> 19<span class="line"><span></span></span> 20<span class="line"><span>* ESLintå </span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><p>npm install -d eslint</p><div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span></span></span> 21<span class="line"><span>å®è£ ä¾èµä¹åï¼å½ä»¤è¡è°ç¨ä¸é¢çå½ä»¤å³å¯å¯¹æå®çæä»¶ãç®å½ãå¹é 项è¿è¡ESLintæ£æ¥åä¿®å¤</span></span> 22<span class="line"><span></span></span> 23<span class="line"><span>ä¸Prettier䏿 ·ï¼é常æä»¬ä¸ä¼éæ©æå¨è°ç¨ï¼èæ¯éæå° Git Hooks ä¸ï¼ä½¿å ¶æä¸ºèªå¨åæµç¨ä¸çä¸é¨åã</span></span> 24<span class="line"><span></span></span> 25<span class="line"><span>\`\`\`shell</span></span> 26<span class="line"><span># --fixä¿®å¤</span></span> 27<span class="line"><span>eslint --fix</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><p>注æï¼å¹¶éææçESLintè§åï¼é½å¯ä»¥ä½¿ç¨--fixä¿®å¤ï¼
27请æ¥é <a href="https://eslint.nodejs.cn/docs/latest/rules/" target="_blank" rel="noreferrer">ESLintè§åå¤§å ¨</a></p><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/image-20220323185257385%20.png" alt="image-20220323185257385"></p><ul><li><p>ESLintæä»¶</p><p>WebStromä¸å ç½®äºESLintæä»¶ä¸å¿ èªå¨å®è£ ï¼ä½æ¯å¿ é¡»è¦å å®è£ ESLintå ï¼æè½èµ·ä½ç¨</p><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/image-20220323100746808%20.png" alt="image-20220323100746808"></p><p>å¦ä¸ä¸ªéè¦ç设置ï¼è¿éå¯ä»¥è®¾ç½®WebStromæç §ESLinté ç½®æä»¶è¿è¡æ£æ¥ï¼é»è®¤ä¹æ¯è¿æ ·ï¼,妿è¿åESLintè§åå°±æ¯å¨ä»£ç ä¸ï¼ç¨æ³¢æµªçº¿æ è¯åºæ¥</p><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/image-20220323102158132%20.png" alt="image-20220323102158132"></p></li></ul><p>ESLint çåºå±è¦ç´ æ¯ è¯æ³æ ï¼ASTï¼ å è§åï¼Rulesï¼ãESLint çå é¨å·¥ä½æ¥éª¤å¯ä»¥æ¦æ¬ä¸ºï¼</p><ul><li><p>ESLint éè¿è§£æå¨ï¼parserï¼ESLinté»è®¤ä½¿ç¨çè§£æå¨æ¯espressï¼å°æºä»£ç è§£ææè¯æ³æ ï¼ASTï¼</p></li><li><p>深度éå ASTï¼éåå°èç¹åè·¯å¾æ¶è§¦åç¹å®çé©å</p></li><li><p>Rule å¨é©åä¸æè½½æ£æµé»è¾ï¼æ§è¡æ£æµé»è¾æ¶åç°å½åè¯æ³ä¸ç¬¦åè§èï¼ç´æ¥å ESLint 䏿¥é误信æ¯ã</p></li></ul><h3 id="èªå®ä¹eslinté ç½®" tabindex="-1">èªå®ä¹ESLinté ç½® <a class="header-anchor" href="#èªå®ä¹eslinté ç½®" aria-label="Permalink to "èªå®ä¹ESLinté ç½®"">â</a></h3><p>éç¹æ¯ plugin å¼å ¥æä»¶ï¼filesæå®æä»¶ç±»åï¼ç¶å rules æ¯ç½å该æä»¶çè§å</p><div class="language-ts vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// --------------</span></span> 28<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 1ãeslint9.x extendsé项已åºå¼</span></span> 29<span class="line"></span> 30<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 2ã</span></span> 31<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// languageOptions: { // è¿ä¸ªé项ä¸çé ç½®åå ·ä½çè§£æå¨ç¸å ³ã</span></span> 32<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// parser: parserVue, // åçº§é½æ¯vue è§£æå¨é ç½®</span></span> 33<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// sourceType: 'module',</span></span> 34<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// parserOptions: {</span></span> 35<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// ecmaFeatures: {</span></span> 36<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// jsx: true</span></span> 37<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// },</span></span> 38<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// extraFileExtensions: ['.vue'],</span></span> 39<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// parser:parserTS // åçº§é½æ¯tsè§£æå¨çé ç½®</span></span> 40<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// }</span></span> 41<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// },</span></span> 42<span class="line"></span> 43<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 3ãæä»¶å¯¹è±¡ key ï¼å°±æ¯è§åçåç¼ï¼è¿ä¸ª key ä¸ä¸å®æ¯æä»¶å åï¼å¯ä»¥æ¯ä»»æçãå ³éè§åï¼ eslint-disable-next-line ts/no-unused-vars</span></span> 44<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 使¯åç° @eslint/js 宿¹æä¾çæä»¶ï¼è§åå°±æ¯ no-debugger è¿ç§æ²¡æåç¼</span></span> 45<span class="line"></span> 46<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 4ãï¼æä»¶xãæä»¶xå çè§åï¼éè¦å¨ä¸ä¸ªé 置对象å ï¼ä¸è½è·¨å¯¹è±¡</span></span> 47<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// plugins: {</span></span> 48<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// ts: pluginTS,</span></span> 49<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// vue: pluginVue,</span></span> 50<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//</span></span> 51<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// },</span></span> 52<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// rules: {</span></span> 53<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 'ts/no-unused-vars':['warn', {argsIgnorePattern: '^_'}],</span></span> 54<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 'vue/component-name-in-template-casing': ['error', 'PascalCase'],</span></span> 55<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// }</span></span> 56<span class="line"></span> 57<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// --------------</span></span> 58<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">
58import</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { Linter } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'eslint'</span></span> 59<span class="line"></span> 60<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// eslint èªå¸¦ç js è§å https://www.npmjs.com/package/@eslint/js</span></span> 61<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> js </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '@eslint/js'</span></span> 62<span class="line"></span> 63<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// eslint 飿 ¼åç¸å ³çè§åæ¶éå°éé¢</span></span> 64<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> stylisticPlugin </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '@stylistic/eslint-plugin'</span></span> 65<span class="line"></span> 66<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// @typescript-eslint/eslint-plugin</span></span> 67<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// tsæä»¶ãç»è¿è°è¯åç°è¿ä¸ªæä»¶å¯¼åºconfigs['flat/recommended']乿¯ä¸ªæ°ç»ï¼æ²¡æ³ç´æ¥ååºæ¥ rules</span></span> 68<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> pluginTS </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '@typescript-eslint/eslint-plugin'</span></span> 69<span class="line"></span> 70<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// @typescript-eslint/parser tsè§£æå¨(ç´æ¥è§£æ tsãä¸vue-eslint-parseråµå¥ä½¿ç¨è§£ævue ä¸çts)</span></span> 71<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 1ãé 置项 https://typescript-eslint.io/packages/parser/#configuration</span></span> 72<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> parserTS </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '@typescript-eslint/parser'</span></span> 73<span class="line"></span> 74<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// é¼ æ å³é®è°è¯çä¸å¼å ¥çæä»¶çç»æã plugin.configs å¦æåªærulesç´æ¥æ¾å° rules åæ®µï¼å¦æè¿æå ¶ä»ç´æ¥å±å¼</span></span> 75<span class="line"></span> 76<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> unocssConfig </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '@unocss/eslint-config/flat'</span></span> 77<span class="line"></span> 78<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// eslint-plugin-vue ææ¡£ï¼https://eslint.vuejs.org/</span></span> 79<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 1ãæä¾ vue-<template>çä¸äºè§å</span></span> 80<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> pluginVue </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'eslint-plugin-vue'</span></span> 81<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// globalså ¨å±åéé ç½®</span></span> 82<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">
82import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> globals </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'globals'</span></span> 83<span class="line"></span> 84<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// export default resConfig;</span></span> 85<span class="line"></span> 86<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// import { Better } from '@baidu/better-core'</span></span> 87<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// import { Linter } from '@baidu/better-plugin-linter'</span></span> 88<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//</span></span> 89<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// const better = new Better().register(</span></span> 90<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// new Linter({</span></span> 91<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// vue: true,</span></span> 92<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// typescript: true,</span></span> 93<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// unocss: true,</span></span> 94<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// stylistic: true,</span></span> 95<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// include: ['test-file/**/*'],</span></span> 96<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// }),</span></span> 97<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// )</span></span> 98<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// const config = await better.apply('linter')</span></span> 99<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//</span></span> 100<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// export default config</span></span> 101<span class="line"></span> 102<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// vue-eslint-parser ææ¡£ï¼https://www.npmjs.com/package/vue-eslint-parser</span></span> 103<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 1ãè§£æ vue æä»¶ç <template> æ ç¾</span></span> 104<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 2ãé»è®¤è·³è¿ <script>æ ç¾ï¼å¯ä»¥æå® languageOptions.parser 为 ts è§£æå¨ï¼@typescript-eslint/parseræä¾ï¼</span></span> 105<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> parserVue </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue-eslint-parser'</span></span> 106<span class="line"></span> 107<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> indent</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 2</span></span> 108<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> stylistic</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> true</span></span> 109<span class="line"></span> 110<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> tsRules</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (pluginTS.configs[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'flat/strict'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Linter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[]).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">reduce</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">((</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">pre</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">cur</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 111<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (cur.rules) {</span></span> 112<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> key</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cur.rules) {</span></span> 113<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> replacedKey</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> key.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">replace</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'@typescript-eslint/'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'ts/'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span> 114<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> pre[replacedKey] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cur.rules[key]</span></span> 115<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 116<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 117<span class="line"></span> 118<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> pre</span></span> 119<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}, {} </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Record</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">any</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">>)</span></span> 120<span class="line"></span> 121<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">function</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> renameRule</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">options</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 122<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> rules</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Record</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">any</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">>[]</span></span> 123<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> origin</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span></span> 124<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> target</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span></span> 125<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}) {</span></span> 126<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">rules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">origin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">target</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> options</span></span> 127<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rules.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">reduce</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">((</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">resultRules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">rule</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 128<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> key</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rule) {</span></span> 129<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> replacedKey</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> key.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">replace</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(origin, target)</span></span> 130<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> resultRules[replacedKey] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rule[key]</span></span> 131<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 132<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> resultRules</span></span> 133<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }, {} </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Record</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">any</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">>)</span></span> 134<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span> 135<span class="line"></span> 136<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">function</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> composeRulesFromConfigs</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">configs</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Linter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[]) {</span></span> 137<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> configs.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">reduce</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">((</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">pre</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">cur</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 138<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (cur.rules) {</span></span> 139<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> key</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cur.rules) {</span></span> 140<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> replacedKey</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> key.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">replace</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'@typescript-eslint/'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'ts/'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span> 141<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> pre[replacedKey] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cur.rules[key]</span></span> 142<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 143<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 144<span class="line"></span> 145<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-d
145ark:#E1E4E8;"> pre</span></span> 146<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }, {} </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Record</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"><</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">any</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">>)</span></span> 147<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span> 148<span class="line"></span> 149<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> vueconfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 150<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'my/vue'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 151<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> files: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'src/**/*.vue'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 152<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> plugins: {</span></span> 153<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> vue: pluginVue,</span></span> 154<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ts: pluginTS,</span></span> 155<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 156<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> languageOptions: {</span></span> 157<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> parser: parserVue,</span></span> 158<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> sourceType: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'module'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 159<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> parserOptions: {</span></span> 160<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ecmaFeatures: {</span></span> 161<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> jsx: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 162<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 163<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> extraFileExtensions: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'.vue'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 164<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> parser: parserTS,</span></span> 165<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> sourceType: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'module'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 166<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 167<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 168<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> processor: pluginVue.processors[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'.vue'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 169<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rules: {</span></span> 170<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ...</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">composeRulesFromConfigs</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(pluginVue.configs[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'flat/recommended'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]),</span></span> 171<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'no-debugger'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 172<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/block-order'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span> 173<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 174<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 175<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> order: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'template'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'script'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'style'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 176<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 177<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span> 178<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/component-name-in-template-casing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'PascalCase'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 179<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/component-options-name-casing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'PascalCase'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 180<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/custom-event-name-casing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'
180camelCase'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 181<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/define-macros-order'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span> 182<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 183<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 184<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> order: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'defineOptions'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'defineProps'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'defineEmits'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'defineSlots'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 185<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 186<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span> 187<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/dot-location'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'property'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 188<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/dot-notation'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, { allowKeywords: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }],</span></span> 189<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/eqeqeq'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'smart'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 190<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/html-indent'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, indent],</span></span> 191<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/html-quotes'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'double'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 192<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/max-attributes-per-line'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'off'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 193<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/multi-word-component-names'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'off'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 194<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/no-dupe-keys'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'off'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 195<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/no-empty-pattern'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 196<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/no-irregular-whitespace'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 197<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/no-loss-of-precision'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 198<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/no-restricted-syntax'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span> 199<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 200<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'DebuggerStatement'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 201<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'LabeledStatement'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 202<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'WithStatement'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 203<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span> 204<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/no-restricted-v-bind'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'/^v-/'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 205<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/no-setup-props-reactivity-loss'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'off'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 206<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/no-sparse-arrays'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 207<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/no-unused-refs'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 208<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/no-useless-v-bind'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 209<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/no-v-html'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'off'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 210<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/object-shorthand'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span> 211<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 212<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'always'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 213<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 214<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> avoidQuotes: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 215<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ignoreConstructors: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">
215false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 216<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 217<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span> 218<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/prefer-separate-static-class'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 219<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/prefer-template'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 220<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/prop-name-casing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'camelCase'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 221<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/require-default-prop'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'off'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 222<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/require-prop-types'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'off'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 223<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/space-infix-ops'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 224<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/space-unary-ops'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, { nonwords: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, words: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }],</span></span> 225<span class="line"></span> 226<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(stylistic</span></span> 227<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ?</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 228<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/array-bracket-spacing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'never'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 229<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/arrow-spacing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">
229, { after: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, before: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }],</span></span> 230<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/block-spacing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'always'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 231<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/block-tag-newline'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span> 232<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 233<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 234<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> multiline: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'always'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 235<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> singleline: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'always'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 236<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 237<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span> 238<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/brace-style'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span> 239<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 240<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'stroustrup'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 241<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { allowSingleLine: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 242<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span> 243<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/comma-dangle'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'always-multiline'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 244<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/comma-spacing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, { after: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, before: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }],</span></span> 245<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/comma-style'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'last'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 246<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/html-comment-content-spacing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span> 247<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 248<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'always'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 249<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 250<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> exceptions: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'-'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 251<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 252<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span> 253<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/key-spacing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span> 254<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 255<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { afterColon: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, beforeColon: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">
255false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 256<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span> 257<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/keyword-spacing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, { after: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, before: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }],</span></span> 258<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/object-curly-newline'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'off'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 259<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/object-curly-spacing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'always'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 260<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/object-property-newline'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span> 261<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 262<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { allowMultiplePropertiesPerLine: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 263<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span> 264<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/operator-linebreak'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'before'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 265<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/padding-line-between-blocks'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'always'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 266<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/quote-props'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'consistent-as-needed'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 267<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/space-in-parens'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'never'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 268<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'vue/template-curly-spacing'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 269<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 270<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> :</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {}),</span></span> 271<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 272<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span> 273<span class="line"></span> 274<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> stylisticRules</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> renameRule</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">
274({</span></span> 275<span class="line"></span> 276<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rules: [stylisticPlugin.configs.recommended.rules</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">!</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 277<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> origin: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'@stylistic/'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 278<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> target: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'stylistic/'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 279<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span> 280<span class="line"></span> 281<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [</span></span> 282<span class="line"></span> 283<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 284<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'my/global'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 285<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> languageOptions: {</span></span> 286<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ecmaVersion: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2022</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 287<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> globals: {</span></span> 288<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">globals.browser,</span></span> 289<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">globals.es2021,</span></span> 290<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">globals.node,</span></span> 291<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> document: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'readonly'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 292<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> navigator: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'readonly'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 293<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> window: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'readonly'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 294<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 295<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> parserOptions: {</span></span> 296<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ecmaFeatures: {</span></span> 297<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> jsx: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 298<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 299<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ecmaVersion: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2022</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 300<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> sourceType: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'module'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 301<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 302<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> sourceType: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'module'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 303<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 304<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> linterOptions: {</span></span> 305<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> reportUnusedDisableDirectives: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 306<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 307<span class="line"></span> 308<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 309<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 310<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'my/ts'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 311<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> files: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'**/*.?([cm])tsx'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'**/*.ts'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'**/*.vue'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 312<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> plugins: {</span></span> 313<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ts: pluginTS,</span></span> 314<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 315<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> languageOptions: {</span></span> 316<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> parser: parserTS,</span></span> 317<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> sourceType: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'module'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 318<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 319<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rules: {</span></span> 320<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'no-debugger'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 321<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ...</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">composeRulesFromConfigs</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(pluginTS.configs[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'flat/strict'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Linter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[]),</span></span> 322<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 323<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 324<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 325<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'my/js'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 326<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> files: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'**/*.?([cm])jsx'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'src/**/*.js'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 327<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> plugins: {</span></span> 328<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> js,</span></span> 329<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 330<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rules: {</span></span> 331<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">js.configs.recommended.rules,</span></span> 332<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 333<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 334<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 335<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'
335my/unocss'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 336<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">unocssConfig,</span></span> 337<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 338<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // ...(pluginTS.configs['flat/recommended'] as Linter.Config[]),</span></span> 339<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> vueconfig,</span></span> 340<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // ...pluginVue.configs['flat/recommended'],</span></span> 341<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 342<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'my/stylistic'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 343<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // ...stylisticPlugin.configs.recommended,</span></span> 344<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> plugins: {</span></span> 345<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> stylistic: stylisticPlugin,</span></span> 346<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 347<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rules: {</span></span> 348<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> ...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">stylisticRules,</span></span> 349<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'stylistic/semi'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'always'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 350<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'stylistic/indent'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'error'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">4</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 351<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 352<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 353<span class="line"></span> 354<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">
35453</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br><span class="line-number">66</span><br><span class="line-number">67</span><br><span class="line-number">68</span><br><span class="line-number">69</span><br><span class="line-number">70</span><br><span class="line-number">71</span><br><span class="line-number">72</span><br><span class="line-number">73</span><br><span class="line-number">74</span><br><span class="line-number">75</span><br><span class="line-number">76</span><br><span class="line-number">77</span><br><span class="line-number">78</span><br><span class="line-number">79</span><br><span class="line-number">80</span><br><span class="line-number">81</span><br><span class="line-number">82</span><br><span class="line-number">83</span><br><span class="line-number">84</span><br><span class="line-number">85</span><br><span class="line-number">86</span><br><span class="line-number">87</span><br><span class="line-number">88</span><br><span class="line-number">89</span><br><span class="line-number">90</span><br><span class="line-number">91</span><br><span class="line-number">92</span><br><span class="line-number">93</span><br><span class="line-number">94</span><br><span class="line-number">95</span><br><span class="line-number">96</span><br><span class="line-number">97</span><br><span class="line-number">98</span><br><span class="line-number">99</span><br><span class="line-number">100</span><br><span class="line-number">101</span><br><span class="line-number">102</span><br><span class="line-number">103</span><br><span class="line-number">104</span><br><span class="line-number">105</span><br><span class="line-number">106</span><br><span class="line-number">107</span><br><span class="line-number">108</span><br><span class="line-number">109</span><br><span class="line-number">110</span><br><span class="line-number">111</span><br><span class="line-number">112</span><br><span class="line-number">113</span><br><span class="line-number">114</span><br><span class="line-number">115</span><br><span class="line-number">116</span><br><span class="line-number">117</span><br><span class="line-number">118</span><br><span class="line-number">119</span><br><span class="line-number">120</span><br><span class="line-number">121</span><br><span class="line-number">122</span><br><span class="line-number">123</span><br><span class="line-number">124</span><br><span class="line-number">125</span><br><span class="line-number">126</span><br><span class="line-number">127</span><br><span class="line-number">128</span><br><span class="line-number">129</span><br><span class="line-number">130</span><br><span class="line-number">131</span><br><span class="line-number">132</span><br><span class="line-number">133</span><br><span class="line-number">134</span><br><span class="line-number">135</span><br><span class="line-number">136</span><br><span class="line-number">137</span><br><span class="line-number">138</span><br><span class="line-number">139</span><br><span class="line-number">140</span><br><span class="line-number">141</span><br><span class="line-number">142</span><br><span class="line-number">143</span><br><span class="line-number">144</span><br><span class="line-number">145</span><br><span class="line-number">146</span><br><span class="line-number">147</span><br><span class="line-number">148</span><br><span class="line-number">149</span><br><span class="line-number">150</span><br><span class="line-number">151</span><br><span class="line-number">152</span><br><span class="line-number">153</span><br><span class="line-number">154</span><br><span class="line-number">155</span><br><span class="line-number">156</span><br><span class="line-number">157</span><br><span class="line-number">158</span><br><span class="line-number">159</span><br><span class="line-number">160</span><br><span class="line-number">161</span><br><span class="line-number">162</span><br><span class="line-number">163</span><br><span class="line-number">164</span><br><span class="line-number">165</span><br><span class="line-number">166</span><br><span class="line-number">167</span><br><span class="line-number">168</span><br><span class="line-number">169</span><br><span class="line-number">170</span><br><span class="line-number">171</span><br><span class="line-number">172</span><br><span class="line-number">173</span><br><span class="line-number">174</span><br><span class="line-number">175</span><br><span class="line-number">176</span><br><span class="line-number">177</span><br><span class="line-number">178</span><br><span class="line-number">179</span><br><span class="line-number">180</span><br><span class="line-number">181</span><br><span class="line-number">182</span><br><span class="line-number">183</span><br><span class="line-number">184</span><br><span class="line-number">185</span><br><span class="line-number">186</span><br><span class="line-number">187</span><br><span class="line-number">188</span><br><span class="line-number">189</span><br><span class="line-number">190</span><br><span class="line-number">191</span><br><span class="line-number">192</span><br><span class="line-number">193</span><br><span class="line-number">
354194</span><br><span class="line-number">195</span><br><span class="line-number">196</span><br><span class="line-number">197</span><br><span class="line-number">198</span><br><span class="line-number">199</span><br><span class="line-number">200</span><br><span class="line-number">201</span><br><span class="line-number">202</span><br><span class="line-number">203</span><br><span class="line-number">204</span><br><span class="line-number">205</span><br><span class="line-number">206</span><br><span class="line-number">207</span><br><span class="line-number">208</span><br><span class="line-number">209</span><br><span class="line-number">210</span><br><span class="line-number">211</span><br><span class="line-number">212</span><br><span class="line-number">213</span><br><span class="line-number">214</span><br><span class="line-number">215</span><br><span class="line-number">216</span><br><span class="line-number">217</span><br><span class="line-number">218</span><br><span class="line-number">219</span><br><span class="line-number">220</span><br><span class="line-number">221</span><br><span class="line-number">222</span><br><span class="line-number">223</span><br><span class="line-number">224</span><br><span class="line-number">225</span><br><span class="line-number">226</span><br><span class="line-number">227</span><br><span class="line-number">228</span><br><span class="line-number">229</span><br><span class="line-number">230</span><br><span class="line-number">231</span><br><span class="line-number">232</span><br><span class="line-number">233</span><br><span class="line-number">234</span><br><span class="line-number">235</span><br><span class="line-number">236</span><br><span class="line-number">237</span><br><span class="line-number">238</span><br><span class="line-number">239</span><br><span class="line-number">240</span><br><span class="line-number">241</span><br><span class="line-number">242</span><br><span class="line-number">243</span><br><span class="line-number">244</span><br><span class="line-number">245</span><br><span class="line-number">246</span><br><span class="line-number">247</span><br><span class="line-number">248</span><br><span class="line-number">249</span><br><span class="line-number">250</span><br><span class="line-number">251</span><br><span class="line-number">252</span><br><span class="line-number">253</span><br><span class="line-number">254</span><br><span class="line-number">255</span><br><span class="line-number">256</span><br><span class="line-number">257</span><br><span class="line-number">258</span><br><span class="line-number">259</span><br><span class="line-number">260</span><br><span class="line-number">261</span><br><span class="line-number">262</span><br><span class="line-number">263</span><br><span class="line-number">264</span><br><span class="line-number">265</span><br><span class="line-number">266</span><br><span class="line-number">267</span><br><span class="line-number">268</span><br><span class="line-number">269</span><br><span class="line-number">270</span><br><span class="line-number">271</span><br><span class="line-number">272</span><br><span class="line-number">273</span><br><span class="line-number">274</span><br><span class="line-number">275</span><br><span class="line-number">276</span><br><span class="line-number">277</span><br><span class="line-number">278</span><br><span class="line-number">279</span><br><span class="line-number">280</span><br><span class="line-number">281</span><br><span class="line-number">282</span><br><span class="line-number">283</span><br><span class="line-number">284</span><br><span class="line-number">285</span><br><span class="line-number">286</span><br><span class="line-number">287</span><br><span class="line-number">288</span><br><span class="line-number">289</span><br><span class="line-number">290</span><br><span class="line-number">291</span><br><span class="line-number">292</span><br><span class="line-number">293</span><br><span class="line-number">294</span><br><span class="line-number">295</span><br><span class="line-number">296</span><br><span class="line-number">297</span><br><span class="line-number">298</span><br><span class="line-number">299</span><br><span class="line-number">300</span><br><span class="line-number">301</span><br><span class="line-number">302</span><br><span class="line-number">303</span><br><span class="line-number">304</span><br><span class="line-number">305</span><br><span class="line-number">306</span><br><span class="line-number">307</span><br><span class="line-number">308</span><br><span class="line-number">309</span><br><span class="line-number">310</span><br><span class="line-number">311</span><br><span class="line-number">312</span><br><span class="line-number">313</span><br><span class="line-number">314</span><br><span class="line-number">315</span><br><span class="line-number">316</span><br><span class="line-number">317</span><br><span class="line-number">318</span><br><span class="line-number">319</span><br><span class="line-number">320</span><br><span class="line-number">321</span><br><span class="line-number">322</span><br><span class="line-number">323</span><br><span class="line-number">324</span><br><span class="line-number">325</span><br><span class="line-number">326</span><br><span class="line-number">327</span><br><span class="line-number">
354328</span><br></div></div><h2 id="工使µèªå¨åéæ" tabindex="-1">工使µèªå¨åéæ <a class="header-anchor" href="#工使µèªå¨åéæ" aria-label="Permalink to "工使µèªå¨åéæ"">â</a></h2><h3 id="git-hooks" tabindex="-1">Git Hooks <a class="header-anchor" href="#git-hooks" aria-label="Permalink to "Git Hooks"">â</a></h3><p>Gité¢å å®ä¹äºä¸äºäºä»¶é©åï¼å¦<code>commit-msg</code>ã<code>pre-commit</code>çï¼å½æä»¬æ§è¡å¯¹åºçGitæä½æ¶ä¼è§¦åå®ä»¬ï¼ç¶åé¡¹ç®æ ¹ç®å½ä¸ç.git/hooks ç®å½ä¸å¯¹åºçèæ¬å°±ä¼æ§è¡ï¼å¦å¾æç¤ºï¼</p><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/image-20220323191501634%20.png" alt="image-20220323191501634"></p><p>é»è®¤æ åµä¸ï¼è¿éshellèæ¬é½æ¯<code>.sample</code>ç»å°¾çï¼æä»¥æä»¬æ§è¡å¯¹åºçGitæä½æ¶ï¼å¹¶ä¸ä¼è§¦å对åºçèæ¬æ§è¡ãæä»¬å¯ä»¥å°<code>.sample</code>ç»å°¾å»æï¼å°±ä¼è§¦åæ§è¡ï¼å ¶ä¸çshellèæ¬äºãåæ¶ï¼æä»¬å¯ä»¥ç¼åshellèæ¬ï¼å°±è½è®©Git触åå¾åäºä»¶æ¶ï¼æç §æä»¬è¦æ±å»æ§è¡ä»»å¡äº</p><p>ä½å端工ç¨å¸å¤§å¤å¯¹linux/windows shell并䏿 é¿ï¼ å æ¤æä»¬éè¿ç¼ågit hooksèæ¬æ¥ä¼ååç«¯å·¥ä½æµçè¿æ¡éè·¯ååè°é¾ã使¯ï¼Nodejsçåºç°æ¹åäºè¿ä¸åï¼å®è®©JSæ¥æäºæ§å¶âæä½ç³»ç»âçè½åï¼ä½ åªéè¦å®è£ npmå <a href="https://link.zhihu.com/?target=https%3A//www.npmjs.com/package/husky" target="_blank" rel="noreferrer">husky</a>ï¼å®ä¼å¸®æä»¬èªå¨çæ.git/hooksç®å½ä¸çshell scriptï¼æä»¬ä¾¿å¯ä»¥å¾è½»æ¾çä½¿ç¨æ´çæçJSå¤çgit hooksä»»å¡ï¼èæ éå ³æ³¨shellèæ¬çå®ç°ç»è</p><p>å¾ä¸ï¼<code>pre-commit</code>æä»¶ä¹æä»¥ï¼æ²¡æ<code>.sample</code>ç»å°¾ï¼å°±æ¯æå®è£ äºhuskyå ï¼ç¶åå¨packageä¸é 置触åçä»»å¡åï¼huskyèªå¨å¸®æçæèæ¬æ¾å ¥å ¶ä¸ï¼å¹¶å»æ<code>.sample</code></p><h4 id="huskyæ§çæ¬" tabindex="-1">huskyæ§çæ¬ <a class="header-anchor" href="#huskyæ§çæ¬" aria-label="Permalink to "huskyæ§çæ¬"">â</a></h4><p><strong>å®è£ husky</strong></p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> [email protected]</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><strong>package.jsonä¸é ç½®husky</strong></p><div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"scripts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 355<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "test"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"node test.js"</span></span> 356<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">},</span></span> 357<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"husky"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 358<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "hooks"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 359<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // å¯ä»¥æ§è¡ä¸ä¸ªjsæä»¶ï¼å°æ§å¶æè½¬ç§»ç»æä»¬æ´çæçnodejs</span></span> 360<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "pre-commit"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"node test.js"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span></span> 361<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // ä¹å¯ä»¥è°ç¨å ¶ä»èæ¬æè æ§è¡ä¸æ®µåçshellå½ä»¤</span></span> 362<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "commit-msg"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"npm run test && echo succeed"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 363<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 364<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 365<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div><p>常ç¨ä¸é¢çæ¹å¼éæé©å</p><div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span>
365<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"husky"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 366<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "hooks"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 367<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "commit-msg"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"commitlint -E HUSKY_GIT_PARAMS"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 368<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "pre-commit"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"lint-staged"</span></span> 369<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 370<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><h4 id="huskyæ°çæ¬" tabindex="-1">huskyæ°çæ¬ <a class="header-anchor" href="#huskyæ°çæ¬" aria-label="Permalink to "huskyæ°çæ¬"">â</a></h4><p>æ°çæ¬å¼å ¥ç ´åæ§åå¨ï¼ä½¿ç¨æ¹å¼åæ§çæ¬æè¾å¤§åºå ¥</p><p>æ°çä¸å¨ä½¿ç¨é»è®¤ç<code>.git/hooks</code>ç®å½åå¨èæ¬ï¼èæ¯æå®äºé¡¹ç®å çæä»¶å¤¹ä¸ºèæ¬ç®å½</p><p><strong>å®è£ husky</strong></p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> husky</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><strong>package.json䏿·»å </strong></p><p>prepareèæ¬ä¼å¨<code>npm install</code>ï¼ä¸å¸¦åæ°ï¼ä¹åèªå¨æ§è¡</p><p>彿们æ§è¡npm installå®è£ å®é¡¹ç®ä¾èµå伿§è¡ <code>husky install</code>å½ä»¤ï¼è¯¥å½ä»¤ä¼å¨å½åç®å½å建.husky/ç®å½å¹¶æå®è¯¥ç®å½ä¸ºgit hooksæå¨çç®å½ããé»è®¤git hooksç®å½å¨.git/hooksä¸ï¼è¿ä¸ªç®å½æ¯ä¸ä¼è¢«æäº¤å°ä»åºçã</p><p>妿䏿·»å 为prepareèæ¬ï¼å³ä½¿.huskyæä»¶å¤¹è¢«æäº¤å°gitä»åºï¼å ¶ä»äººå¨clone项ç®åï¼
370æ¬å°çgitä¸ä¼å°Gité©åçç®å½æå®ä¸ºé¡¹ç®ä¸ç.huskyç®å½</p><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/image-20220324180608409%20.png" alt="image-20220324180608409"></p><div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//æå¨å¨package.json䏿·»å </span></span> 371<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span> 372<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "scripts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 373<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "prepare"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"husky install"</span></span> 374<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 375<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span> 376<span class="line"></span> 377<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//使ç¨npmå½ä»¤æ·»å </span></span> 378<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">npm set-script prepare </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"husky install"</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></div></div><p><strong>æ·»å git hooks</strong></p><p><code>husky add</code>ï¼ç¬¬ä¸ä¸ªåæ°æ¯å¨.huskyç®å½ä¸æ°å»ºçæä»¶åï¼ç¬¬äºä¸ªåæ°æ¯æä»¶ä¸çåå ¥çèæ¬</p><p>å¨.huskyç®å½ä¸æ°å»ºpre-commitèæ¬ï¼</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npx</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> husky</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .husky/pre-commit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "npx lint-staged"</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/image-20220327171214174.png" alt="image-20220327171214174"></p><p>å¨.huskyç®å½ä¸æ°å»ºcommit-msgèæ¬</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npx</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> husky</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .husky/commit-msg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "npx --no-install commitlint --edit </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">$1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span></span> 379<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">#--no-install åæ°è¡¨ç¤ºå¼ºå¶npx使ç¨é¡¹ç®ä¸node_modulesç®å½ä¸çcommitlintå </span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/image-20220327171056231.png" alt="image-20220327171056231"></p><p>è¿éæå°çï¼å¨èæ¬ä¸æ·»å çå 个å½ä»¤ï¼ä¼å¨å颿å°</p><h3 id="lint-staged" tabindex="-1">lint-staged <a class="header-anchor" href="#lint-staged" aria-label="Permalink to "lint-staged"">â</a></h3><p>Git Hookså¯ä»¥è®©æä»¬å¨æäº¤æµç¨ä¸è§¦åèªå®ä¹æä½ï¼å®æåç§å·¥ä½çèªå¨åéæã</p><p>é常æ åµä¸ï¼æä»¬åªéè¦å¯¹èªå·±çæ¬æ¬¡æäº¤åæ´ç代ç ï¼è¿è¡åç§æ ¡éªæä¿®å¤</p><p>lint-stagedå°±è½å®æè¿æ ·çä»»å¡ï¼å¯ä»¥è®©æä»¬çæä½åªéå¯¹äºæååºç代ç </p><p><strong>å®è£ </strong></p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span>
379<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> lint-staged</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p><strong>é ç½®</strong></p><p>åºæ¬æ ¼å¼</p><div class="language- vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>"lint-staged": {</span></span> 380<span class="line"><span> "æä»¶æ ¼å¼": [</span></span> 381<span class="line"><span> "å½ä»¤1",</span></span> 382<span class="line"><span> "å½ä»¤2",</span></span> 383<span class="line"><span> "...å ¶ä»å½ä»¤"</span></span> 384<span class="line"><span> ]</span></span> 385<span class="line"><span>}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br></div></div><p>ä¾åï¼å¯¹æååºä¸çjsãjsxãvueæä»¶ï¼ä½¿ç¨eslintä¿®å¤å½ä»¤ãå 为eslintä¿®å¤åï¼ä»£ç å¯è½ä¼åºç°ååï¼è¿äºå¯è½åºç°çååæ¾èªå¨æ¾å ¥å°æååº</p><div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"lint-staged"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 386<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "*.{js,jsx,vue}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span> 387<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "eslint --fix --ext .js app/"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 388<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span> 389<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><h3 id="éæcommitlint" tabindex="-1">éæcommitlint <a class="header-anchor" href="#éæcommitlint" aria-label="Permalink to "éæcommitlint"">â</a></h3><p>è§èåæäº¤ï¼æ´ä¾¿äºå¨ä»åºä¸æ¥æ¾ææ¬¡æäº¤</p><p>å¯ä»¥ç´æ¥ç¨è§èåçcommit messageçæchange log</p><p><a href="https://commitlint.js.org/#/" target="_blank" rel="noreferrer">commitlint宿¹ç½ç«</a></p><ul><li><p>å®è£ </p><ul><li><p>@commitlint/cli æ¯commitlintæä¾çå½ä»¤è¡å·¥å ·ï¼å®è£ åä¼å°clièæ¬æ¾ç½®å¨./node_modules/.bin/ç®å½ä¸</p></li><li><p>@commitlint/config-conventionalæ¯ç¤¾åºä¸ä¸äºå ±äº«çé ç½®ï¼æä»¬å¯ä»¥æ©å±è¿äºé ç½®ï¼ä¹å¯ä»¥ä¸å®è£ è¿ä¸ªå èªå®ä¹é ç½®</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> @commitlint/cli</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 390<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> @commitlint/config-conventional</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div></li></ul></li><li><p>æäº¤è§è</p><p>commit message ç± <code>header</code>ï¼å¿ é¡»ï¼ ã<code>body</code>ï¼å¯éï¼ã<code>footer</code>ï¼å¯éï¼</p><div class="language-text vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">text</span>
390<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span><type>[scope]: <subject></span></span> 391<span class="line"><span>[body]</span></span> 392<span class="line"><span>[footer]</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><ul><li><p><strong>header</strong></p><div class="language-text vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span><type>[scope]: <subject></span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>typeï¼è¡¨ç¤ºæäº¤çç±»åï¼<code>@commitlint/config-conventional</code>ä¸å å«çå¯é弿</p><div class="language-text vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>feat: æ°åè½</span></span> 393<span class="line"><span></span></span> 394<span class="line"><span>fix: bug ä¿®å¤</span></span> 395<span class="line"><span></span></span> 396<span class="line"><span>docs: ä» ä¿®æ¹ææ¡£</span></span> 397<span class="line"><span></span></span> 398<span class="line"><span>style: ä¿®æ¹æ ¼å¼ï¼ç©ºæ ¼ï¼æ ¼å¼åï¼çç¥åå·çï¼ï¼å¯¹ä»£ç è¿è¡æ²¡æå½±å</sp
398an></span> 399<span class="line"><span></span></span> 400<span class="line"><span>refactor: éæï¼æ¢ä¸æ¯ä¿® bug ï¼ä¹ä¸æ¯å åè½ï¼</span></span> 401<span class="line"><span></span></span> 402<span class="line"><span>build: æå»ºæµç¨ãå¤é¨ä¾èµåæ´ï¼æ¯å¦å级 npm å ãä¿®æ¹ webpack é ç½®ç</span></span> 403<span class="line"><span></span></span> 404<span class="line"><span>perf: æ§è½ä¼å</span></span> 405<span class="line"><span></span></span> 406<span class="line"><span>test: æµè¯ç¸å ³</span></span> 407<span class="line"><span></span></span> 408<span class="line"><span>chore: 对æå»ºè¿ç¨æè¾ å©å·¥å ·ååºï¼å¦ææ¡£çæï¼çæ´æ¹</span></span> 409<span class="line"><span></span></span> 410<span class="line"><span>ci: ci ç¸å ³çæ´æ¹</span></span> 411<span class="line"><span></span></span> 412<span class="line"><span>revert: å½åæäº¤æ¯ä¸ºäºæ¤éä¹åçææ¬¡æäº¤ï¼åºè¯¥ç¨ revert å¼å¤´ï¼åé¢å ä¸è¢«æ¤éçæäº¤ç headerï¼å¨ body ä¸åºè¯¥æ³¨æï¼This reverts commit <hash>. ï¼hash æçå°±æ¯å°è¦è¢«æ¤éç commit SHA </span></span> 413<span class="line"><span>// ä¾å¦</span></span> 414<span class="line"><span>revert: feat(user): add user type</span></span> 415<span class="line"><span>This reverts commit ca16a365467e17915f0273392f4a13331b17617d.</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br></div></div><p>scopeï¼è¡¨ç¤ºæ¬æ¬¡æäº¤ä»£ç çå½±åçèå´</p><p>subjectï¼è¡¨ç¤ºå¯¹æ¬æ¬¡æäº¤ä»£ç çç®çæè¿°</p></li><li><p><strong>body</strong></p><p>body é¨åæ¯å¯¹æ¬å° commit çè¯¦ç»æè¿°ï¼å¯ä»¥åæå¤è¡</p></li><li><p><strong>footer</strong></p><p>åºæ¬ç¨å¨è¿ä¸¤ç§æ åµï¼</p><ul><li><p>ä¸å ¼å®¹çæ¹å¨ï¼ Breaking Changes ï¼,éå¸¸ç¨ BREAKING CHANGE: å¼å¤´ï¼åé¢è·ä¸ä¸ªç©ºæ ¼æä¸¤ä¸ªæ¢è¡ç¬¦ãå©ä½çé¨åå°±æ¯ç¨æ¥è¯´æè¿ä¸ªåå¨çä¿¡æ¯åè¿ç§»æ¹æ³çã</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">refactor:</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 416<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">BREAKING</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> CHANGE:ææåçäºæ´æ¹</span></span> 417<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> æç §ä¸é¢çä¾åè¿ç§»ä»£ç :</span></span> 418<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> Before:</span></span> 419<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> scope:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> {</span></span> 420<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> myAttr:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'attribute',</span></span> 421<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> myBind:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'bind',</span></span> 422<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> myExpression:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'expression'</span></span> 423<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 424<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> After:</span></span> 425<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> scope:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> {</span></span> 426<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> myAttr:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '@',</span></span> 427<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> myBind:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '@',</span></span> 428<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> myExpression:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '&'</span></span> 429<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 430<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> ææåçäºæ´æ¹</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br></div></div></li><li><p>å ³é Issueï¼Closes #Issueå·ï¼</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span>
430<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">fix:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ä¿®å¤ç¨æ·ç»é注å</span></span> 431<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Closes</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> #2314, #3421</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div></li></ul></li></ul></li><li><p>åå§å@commitlint/cliçé ç½®æä»¶</p><p>é¡¹ç®æ ¹ç®å½ä¸ï¼å建<code>commitlint.config.js</code>æä»¶ï¼ä¹å¯ä»¥æ¯<code>.commitlintrc.js</code></p><p><strong>å®ç½ç»åºçé ç½®æä»¶å®æ´çæ ¼å¼</strong></p><div class="language-js vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">module</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">exports</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 432<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> /*</span></span> 433<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * Resolve and load @commitlint/config-conventional from node_modules.</span></span> 434<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * Referenced packages must be installed</span></span> 435<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> */</span></span> 436<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> extends: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'@commitlint/config-conventional'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 437<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> /*</span></span> 438<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * Resolve and load conventional-changelog-atom from node_modules.</span></span> 439<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * Referenced packages must be installed</span></span> 440<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> */</span></span> 441<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> parserPreset: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'conventional-changelog-atom'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 442<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> /*</span></span> 443<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * Resolve and load @commitlint/format from node_modules.</span></span> 444<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * Referenced package must be installed</span></span> 445<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> */</span></span> 446<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> formatter: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'@commitlint/format'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 447<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> /*</span></span> 448<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * Any rules defined here will override rules from @commitlint/config-conventional</span></span> 449<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> */</span></span> 450<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rules: {</span></span> 451<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'type-enum'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'always'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">
451, [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'foo'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]],</span></span> 452<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 453<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> /*</span></span> 454<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * Functions that return true if commitlint should ignore the given message.</span></span> 455<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> */</span></span> 456<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ignores: [(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">commit</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> commit </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">===</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ''</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 457<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> /*</span></span> 458<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * Whether commitlint uses the default ignore rules.</span></span> 459<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> */</span></span> 460<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> defaultIgnores: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 461<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> /*</span></span> 462<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * Custom URL to show upon failure</span></span> 463<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> */</span></span> 464<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> helpUrl:</span></span> 465<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'https://github.com/conventional-changelog/commitlint/#what-is-commitlint'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 466<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> /*</span></span> 467<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * Custom prompt configs</span></span> 468<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> */</span></span> 469<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> prompt: {</span></span> 470<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> messages: {},</span></span> 471<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> questions: {</span></span> 472<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> type: {</span></span> 473<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> description: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'please input type:'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 474<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 475<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 476<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 477<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">};</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br></div></div><p><strong>é常æä»¬ä½¿ç¨ç¬¬ä¸æ¥å®è£ çç¬¬ä¸æ¹é 置就å¯ä»¥äº</strong></p><div class="language-js vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">js</span>
477<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">/*使ç¨ç¬¬ä¸æ¥å®è£ çç¬¬ä¸æ¹é ç½®*/</span></span> 478<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">module</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">exports</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 479<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> extends: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'@commitlint/config-conventional'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 480<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><p><strong>妿æ³è¦èªå®ä¹ä¸äºé ç½®</strong></p><div class="language-js vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">module</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">exports</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 481<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> extends: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'@commitlint/config-conventional'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 482<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> /*å¯ä»¥å¨ä¸é¢ï¼ç»§ç»åå ¶ä»å段çé ç½®ï¼è¿äºé ç½®ä¼è¦ç@commitlint/config-conventionalä¸å¯¹åºçé ç½®*/</span></span> 483<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><p>æ¯å¦Rulesï¼æç §å®ç½ç<a href="https://commitlint.js.org/#/reference-rules" target="_blank" rel="noreferrer">Rules</a>åæ®µé ç½®ï¼è¿éæä»¬è®²ä¸é ç½®çæ ¼å¼</p><div class="language-text vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>'è§åå':[Level,Applicable,Value]</span></span> 484<span class="line"><span></span></span> 485<span class="line"><span>//è§ååï¼ä»å®ç½æ¥å°ææçè§ååç第ä¸é¨å齿¯commit messageçä¸åé¨åï¼ä¾å¦ï¼header-* ãscope-* ãtype-*ï¼è¡¨ç¤ºè§åä½ç¨çé¨å</span></span> 486<span class="line"><span>//Level : é误æç¤ºç级ï¼0æ¯å ³éæç¤ºï¼1æ¯è¦åæç¤ºï¼2æ¯é误æç¤º</span></span> 487<span class="line"><span>//Applicable : alwayså¯ç¨è§åï¼neverå ³éè§å</span></span> 488<span class="line"><span>//Value : æäºè§åéè¦ä¼ éåæ°ï¼å¨è¿éä¼ éï¼æ¯å¦ 'header-max-length': [2, 'always', 72] 表示 headeræé¿72</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><p>ä¾åï¼è¦ç<code>@commitlint/config-conventional</code>ä¸çrulesåæ®µ</p><div class="language-js vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">js</span>
488<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">/**</span></span> 489<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * featureï¼æ°åè½</span></span> 490<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * updateï¼æ´æ°æåè½</span></span> 491<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * fixbugï¼ä¿®è¡¥æåè½çbug</span></span> 492<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * refactorï¼éææä¸ªåè½</span></span> 493<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * optimize: ä¼åæå»ºå·¥å ·æè¿è¡æ¶æ§è½</span></span> 494<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * styleï¼ä» æ ·å¼æ¹å¨</span></span> 495<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * docsï¼ä» ææ¡£æ°å¢/æ¹å¨</span></span> 496<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> * choreï¼æå»ºè¿ç¨æè¾ å©å·¥å ·çåå¨</span></span> 497<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> */</span></span> 498<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">module</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">exports</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span> 499<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> extends: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'@commitlint/config-conventional'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span> 500<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 501<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> /*èªå®ä¹é ç½®ï¼ä¼è¦ç@commitlint/config-conventionalä¸çé ç½®*/</span></span> 502<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rules: {</span></span> 503<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'header-max-length'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'never'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">72</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">], </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// header æé¿72</span></span> 504<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 505<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'body-leading-blank'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'always'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">], </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// bodyæ¢è¡</span></span> 506<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 507<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> //typeçæä¸¾åæ®µï¼æäº¤æ¶çtypeå¼ï¼åªè½æ¯è¿éçå¼ï¼@commitlint/config-conventionalä¸çå¯éå¼å ¨é¨è¢«è¦çäº</span></span> 508<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'type-enum'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'always'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">
508, [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'feature'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'update'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'fixbug'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'refactor'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'optimize'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'style'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'docs'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'chore'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]],</span></span> 509<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 510<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br></div></div></li><li><p>æ·»å å°Gité©åä¸</p><p>æ§çhusky</p><div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//package.jsonæä»¶ä¸</span></span> 511<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"husky"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 512<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "hooks"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 513<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "commit-msg"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"commitlint -E HUSKY_GIT_PARAMS"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 514<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 515<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><p>æ°çhuskyï¼åç §ä¸é¢Git Hooksç« èç使ç¨ï¼</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span>
515<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npx</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> husky</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .husky/commit-msg</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "npx --no-install commitlint --edit </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">$1</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span></span> 516<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">#--no-install åæ°è¡¨ç¤ºå¼ºå¶npx使ç¨é¡¹ç®ä¸node_modulesç®å½ä¸çcommitlintå </span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div></li><li><p>lint-staged</p><p>è¿éä» ä» æ¯æ ¡éªcommit messageï¼ä¸æ¯æååºä»£ç ï¼æä»¥ä¸å¿ 使ç¨lint-staged</p></li><li><p>æäº¤</p><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/image-20220328142551798.png" alt="image-20220328142551798"></p></li><li><p>ç¼åcommit messageçè¾ å©å·¥å ·</p><p>commitzenæ¯ä¸æ¬¾å·¥å ·ï¼å¯ä»¥éè¿å¨ç»ç«¯éæ©çæ¹å¼ï¼å¸®å©æä»¬ç¼ååæ ¼çcommit message</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> commitizen</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>让commitzenå ¶æ¯æ Angular ç Commit message æ ¼å¼</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">commitizen</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> init</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> cz-conventional-changelog</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --save-exact</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>æ¥çpackage.jsonï¼å°±ä¼å¤åºä¸å¥</p><div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"config"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 517<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "commitizen"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 518<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "path"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"./node_modules/cz-conventional-changelog"</span></span> 519<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 520<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><p>以åï¼å¡æ¯ç¨å°<code>git commit</code>å½ä»¤ï¼ä¸å¾æ¹ä¸ºä½¿ç¨<code>git cz</code>ãè¿æ¶ï¼å°±ä¼åºç°é项</p><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/image-202203292033
52004247.png" alt="image-20220329203304247"></p></li></ul><h3 id="éæchangelog" tabindex="-1">éæChangelog <a class="header-anchor" href="#éæchangelog" aria-label="Permalink to "éæChangelog"">â</a></h3><p>å¦æä½ çææ Commit é½ç¬¦å Angular æ ¼å¼ï¼é£ä¹å叿°çæ¬æ¶ï¼ Change log å°±å¯ä»¥ç¨èæ¬èªå¨çæ</p><p>çæçææ¡£å æ¬ä»¥ä¸ä¸ä¸ªé¨åã</p><blockquote><ul><li>New features</li><li>Bug fixes</li><li>Breaking changes.</li></ul></blockquote><p>æ¯ä¸ªé¨åé½ä¼ç½åç¸å ³ç commit ï¼å¹¶ä¸ææåè¿äº commit ç龿¥ãå½ç¶ï¼çæçææ¡£å 许æå¨ä¿®æ¹ï¼æä»¥åå¸åï¼ä½ è¿å¯ä»¥æ·»å å ¶ä»å 容</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> conventional-changelog-cli</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>çæCHANGELOG.mdæä»¶</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">conventional-changelog</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> angular</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> CHANGELOG.md</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -w</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> #å½ä»¤ä¸ä¼è¦ç以åç Change logï¼åªä¼å¨CHANGELOG.mdç头é¨å ä¸èªä»ä¸æ¬¡åå¸ä»¥æ¥çåå¨</span></span> 521<span class="line"></span> 522<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">conventional-changelog</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> angular</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> CHANGELOG.md</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -w</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -r</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> #çæææç Change logï¼è¦æ¹ä¸ºè¿è¡ä¸é¢çå½ä»¤</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><p>æä»¶çæ ¼å¼å¤§æ¦æ¯ä¸é¢è¿ä¸ªæ ·å</p><p><img src="https://hedaodao-1256075778.cos.ap-beijing.myqcloud.com/Essay/image-20220329210029744.png" alt="image-20220329210029744"></p><p>éæå°package.jsonçèæ¬ä¸</p><div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">scripts: {</span></span> 523<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "changelog"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md"</span></span> 524<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><h3 id="éæprettier" tabindex="-1">éæPrettier <a class="header-anchor" href="#éæprettier" aria-label="Permalink to "éæPrettier"">â</a></h3><p>ä¸è¬æ åµä¸ï¼æä»¬å¹¶ä¸ä¼æPrettieréæå°èªå¨åæµç¨ä¸</p><p>å 为ï¼å¦ææä»¬å¯¹é¡¹ç®ä¸å ¶ä»äººç页é¢è¿è¡ä¿®æ¹ï¼å¨æäº¤æ¶èªå¨è§¦åPrettieræ ¼å¼åï¼å¯è½ä¼å°é¡µé¢ä¸å ¶ä»äººçä»£ç æ ¼å¼åï¼è¿æ ·å¨æäº¤è®°å½ä¸æ¥çï¼å ¶ä»äººç代ç ï¼åæäºèªå·±æäº¤ç代ç </p><ul><li><p>å®è£ </p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span>
524<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -D</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> prettier</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></li><li><p>æ ¹ç®å½ä¸æ°å»ºé ç½®æä»¶<code>prettierrc</code></p><div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span> 525<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "printWidth"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">80</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span></span> 526<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "tabWidth"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span></span> 527<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "useTabs"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span></span> 528<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "semi"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 529<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "singleQuote"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span></span> 530<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "bracketSpacing"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span></span> 531<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "bracketSameLine"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span></span> 532<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "endOfLine"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"lf"</span></span> 533<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br></div></div></li><li><p>package.jsonä¸é ç½®</p><p>è¿éä» ä» æ¯æååºçæä»¶éè¦è¿è¡Prettieræ ¼å¼åï¼æä»¥ä½¿ç¨äºlint-staged</p><div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span>
533<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span> 534<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "scripts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 535<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "prettier"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"prettier --write"</span></span> 536<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span> 537<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 538<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "lint-staged"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 539<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "*.{js,vue}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span> 540<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "npm run prettier"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 541<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "git add"</span></span> 542<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span> 543<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 544<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div></li><li><p>æ·»å Git Hooks</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npx</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> husky</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .husky/pre-commit</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "npx lint-staged"</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div></li></ul><p>Gitå®ç½ä»ç»äºï¼ææç<a href="https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90" target="_blank" rel="noreferrer">Gitå¾å</a>ç详ç»ä¿¡æ¯</p><p>æµç¨ï¼</p><ul><li>Git Hookså¨Gitæäº¤çæä¸ªé¶æ®µè§¦åçå¾å</li><li>å¾åä¸ä½¿ç¨lint-stagedï¼ä½¿å¾æ ¼å¼åå·¥å ·åªä½ç¨äºæååºä»£ç </li></ul><p>èªå¨åï¼åªä¼ç¨å°<strong>æäº¤å·¥ä½æµé©å</strong>ï¼æäº¤å·¥ä½æµå å« 4 个é©åï¼</p><div class="language-flow vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">flow</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>st=>start: git commit -m "æäº¤ææ¬"</span></span> 545<span class="line"><span>op1=>operation: pre-commit</span></span> 546<span class="line"><span>op2=>operation: prepare-commit-msg</span></span> 547<span class="line"><span>op3=>operation: commit-msg</span></span> 548<span class="line"><span>op4=>operation: post-commit</span></span> 549<span class="line"><span>e=>
549end: æäº¤å®æ</span></span> 550<span class="line"><span>st->op1->op2->op3->op4</span></span> 551<span class="line"><span>op4->e</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><ul><li><p><code>pre-commit</code> é©åå¨é®å ¥æäº¤ä¿¡æ¯åè¿è¡ï¼å¨è¿ä¸ªé¶æ®µå å ¥ <strong>ä»£ç æ£æ¥</strong> æµç¨ï¼ä¼ä»£ç </p></li><li><p><code>prepare-commit-msg</code> é©åå¨å¯å¨æäº¤ä¿¡æ¯ç¼è¾å¨ä¹åï¼é»è®¤ä¿¡æ¯è¢«å建ä¹åè¿è¡ãå®å¯¹ä¸è¬çæäº¤æ¥è¯´å¹¶æ²¡æä»ä¹ç¨ï¼ç¶è对é£äºä¼èªå¨äº§çé»è®¤ä¿¡æ¯çæäº¤ï¼å¦æäº¤ä¿¡æ¯æ¨¡æ¿ãåå¹¶æäº¤ãå缩æäº¤å修订æäº¤çé常å®ç¨ã ä½ å¯ä»¥ç»åæäº¤æ¨¡æ¿æ¥ä½¿ç¨å®ï¼å¨æå°æå ¥ä¿¡æ¯ãå¯å¨è¿ä¸ªé¶æ®µå è½½ <code>commitizen</code> ä¹ç±»çè¾ å©å¡«åå·¥å ·ã</p></li><li><p><code>commit-msg</code> é©åå¨å³å°æäº¤åè¿è¡ï¼å¾åæ¥æ¶ä¸ä¸ªåæ°ï¼å³åæå½åæäº¤ä¿¡æ¯çä¸´æ¶æä»¶çè·¯å¾ï¼å¯å¨è¿ä¸ªé¶æ®µåå© <code>commitlint</code> è¿è¡æäº¤ä¿¡æ¯è§èæ§æ£æ¥ï¼</p></li><li><p><code>post-commit</code> é©å卿´ä¸ªæäº¤è¿ç¨å®æåè¿è¡ï¼å®ä¸æ¥æ¶ä»»ä½åæ°ï¼å¨è¿ä¸ªé¶æ®µä¸è¬åä¸äºéç¥æä½ã</p></li></ul><p>ä½¿ç¨ Git é©åæç´è§çæ¹å¼æ¯æä½ .git/hooks ä¸çç¤ºä¾æä»¶ï¼å°å¯¹åºé©åæä»¶ç .sample åç¼åç§»é¤å³å¯å¯ç¨ãç¶èè¿ç§æä½æ¹å¼åå¨å¼ç«¯ï¼</p><ol><li>éè¦æä½é¡¹ç®èå´å¤ç .git ç®å½ï¼æç³»ç»çº§å«ãå ¨å±çº§å«ç.gité ç½®æä»¶ï¼</li><li>æ æ³åæ¥ .git/hooks å°è¿ç¨ä»åºï¼.gitæ¯æ¬å°çgité ç½®æä»¶ï¼ä¸ä¼è¢«æäº¤ï¼</li></ol><p>å¯ä»¥å°Gitå¾åçç®å½è®¾ç½®å¨é¡¹ç®çæ ¹ç®å½ä¸</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># æå® Git hooksPath ä¸ºæ ¹ç®å½ä¸ç .githooks ç®å½(åæ¥æ¯ .git/hooks ä¸çæä»¶ )</span></span> 552<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> config</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> core.hooksPath</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .githooks</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>å®è£ husky</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> husky</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>å®è£ lint-staged</p><div class="language-shell vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> lint-staged</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br></div></div><p>å¨package.json</p><div class="language-json vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">json</span>
552<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//å¨hooksä¸å¯ä»¥å®æGitå¾å</span></span> 553<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"husky"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 554<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "hooks"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 555<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "pre-commit"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"lint-staged"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 556<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "commit-msg"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">""</span></span> 557<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span> 558<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">},</span></span> 559<span class="line"></span> 560<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//é对æååºè¿è¡æä½</span></span> 561<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"lint-staged"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 562<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> //æå® ä»ä¹ç±»åçæä»¶ï¼["æ§è¡å½ä»¤1","æ§è¡çå½ä»¤2"]</span></span> 563<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> //ä¸è¬æå½ä»¤æ¾å¨scriptåæ®µéï¼è¿éç´æ¥è°ç¨å ¶ä¸çå½ä»¤</span></span> 564<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> //æå以ä¸ä¸ªå½ä»¤æ¯git add ï¼å°åé¢å½ä»¤åç代ç åæ´éæ°å å°æååº</span></span> 565<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "**/*.{js,vue}"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:[</span></span> 566<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "npm run lint"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 567<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "npm run prettier"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 568<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "git add"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 569<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]</span></span> 570<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">},</span></span> 571<span class="line"></span> 572<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//</span></span> 573<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"scripts"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span> 574<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "dev"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"xxxxx"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 575<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "build"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"xxxxx"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 576<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> //eslintä¿®å¤ --fixæ¯èªå¨ä¿®å¤</span></span> 577<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "lint-fix"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"eslint --fix --ext .js app/"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 578<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> //eslint --extæå®æä»¶ç±»ååç®å½ï¼æ¯æglobæ¹å¼ï¼</span></span> 579<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "lint"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"eslint --ext .js app/"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 580<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 581<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> //prettier</span></span> 582<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "prettier"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"prettier --write"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span> 583<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span> 584<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> //</span></span> 585<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "changelog"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"conventional-changelog -p angular -i CHANGELOG.md -s"</span></span> 586<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">},</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br></div></div><p>å¾ è¡¥å </p><ul><li><p>commit messageéå¶åchange logéå¶<a href="https://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html" target="_blank" rel="noreferrer">Commit message å Change log ç¼åæå</a></p><div class="language-bash vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">bash</span>
586<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -g</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> commitizen</span></span> 587<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -g</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> conventional-changelog</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div></li><li><p>commitLint</p></li><li><p>styleLint</p></li></ul><h2 id="å ¶ä»é ç½®æä»¶" tabindex="-1">å ¶ä»é ç½®æä»¶ <a class="header-anchor" href="#å ¶ä»é ç½®æä»¶" aria-label="Permalink to "å ¶ä»é ç½®æä»¶"">â</a></h2><h3 id="gitignore" tabindex="-1">.gitignore <a class="header-anchor" href="#gitignore" aria-label="Permalink to ".gitignore"">â</a></h3><div class="language-.gitignore vp-adaptive-theme line-numbers-mode"><button title="Copy Code" class="copy"></button><span class="lang">.gitignore</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>#macç³»ç»ä¸ï¼è®°å½æä»¶å¤¹ä½ç½®çæä»¶</span></span> 588<span class="line"><span>.DS_Store</span></span> 589<span class="line"><span></span></span> 590<span class="line"><span>#ä¾èµå®è£ ç®å½</span></span> 591<span class="line"><span>node_modules</span></span> 592<span class="line"><span></span></span> 593<span class="line"><span>#æå è·¯å¾</span></span> 594<span class="line"><span>/dist</span></span> 595<span class="line"><span></span></span> 596<span class="line"><span># local env files</span></span> 597<span class="line"><span>.env.local</span></span> 598<span class="line"><span>.env.*.local</span></span> 599<span class="line"><span></span></span> 600<span class="line"><span># æ¥å¿æä»¶</span></span> 601<span class="line"><span>npm-debug.log*</span></span> 602<span class="line"><span>yarn-debug.log*</span></span> 603<span class="line"><span>yarn-error.log*</span></span> 604<span class="line"><span>pnpm-debug.log*</span></span> 605<span class="line"><span></span></span> 606<span class="line"><span># ç¼è¾å¨é ç½®æä»¶</span></span> 607<span class="line"><span>.idea</span></span> 608<span class="line"><span>.vscode</span></span> 609<span class="line"><span>*.suo</span></span> 610<span class="line"><span>*.ntvs*</span></span> 611<span class="line"><span>*.njsproj</span></span> 612<span class="line"><span>*.sln</span></span> 613<span class="line"><span>*.sw?</span></span></code></pre><div class="line-numbers-wrapper" aria-hidden="true"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br></div></div><h2 id="æ»ç»" tabindex="-1">æ»ç» <a class="header-anchor" href="#æ»ç»" aria-label="Permalink to "æ»ç»"">â</a></h2><p>EditorConfig ä½ç¨äºé¢è§åè¾å ¥é¶æ®µï¼Prettier å¨ä¿ååæäº¤é¶æ®µéæ°ç»ç»ä»£ç ï¼Prettier ä¼æä¸ºä»£ç å½¢æçæç»å³å®è </p><h2 id="åè" tabindex="-1">åè <a class="header-anchor" href="#åè" aria-label="Permalink to "åè"">â</a></h2><p><a href="https://zhuanlan.zhihu.com/p/75531199" target="_blank" rel="noreferrer">æ·±å ¥çè§£ ESLint</a></p><p><a href="https://juejin.cn/post/6859291468138774535" target="_blank" rel="noreferrer">Eslintä¸pluginsåextendsçåºå«</a></p><p><a href="https://eslint.bootcss.com/docs/user-guide/getting-started" target="_blank" rel="noreferrer">ESLint䏿ç½</a></p><p><a href="https://zhuanlan.zhihu.com/p/366141969" target="_blank" rel="noreferrer">å端代ç è§èåï¼EditorConfig + Prettier + ESLint</a></p><p><a href="https://blog.csdn.net/xgangzai/article/details/107724367" target="_blank" rel="noreferrer">è®©ä½ ç commit æ´æä»·å¼(è§è)</a></p><p><a href="http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html" target="_blank" rel="noreferrer">Commit message å Change log ç¼åæåââé®ä¸å³°</a></p>`,119)]))}const g=a(l,[["render",e]]);export{c as __pageData,g as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.