志宝 發表於 2020-3-7 16:52:00

vue+typescript项目中eslint,tslint配置

<p>Tslint配置主要配置文件如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> tsconfig.json</span>
<span style="color: rgba(0, 0, 0, 1)">
{
</span>"compilerOptions"<span style="color: rgba(0, 0, 0, 1)">: {
    </span>"target": "esnext"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"module": "esnext"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"strict": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"jsx": "preserve"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"importHelpers": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"moduleResolution": "node"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"experimentalDecorators": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"esModuleInterop": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"resolveJsonModule": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"allowSyntheticDefaultImports": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"sourceMap": <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"baseUrl": "."<span style="color: rgba(0, 0, 0, 1)">,
    </span>"types"<span style="color: rgba(0, 0, 0, 1)">: [
      </span>"webpack-env"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"jest"<span style="color: rgba(0, 0, 0, 1)">
    ],
    </span>"paths"<span style="color: rgba(0, 0, 0, 1)">: {
      </span>"@/*"<span style="color: rgba(0, 0, 0, 1)">: [
      </span>"src/*"<span style="color: rgba(0, 0, 0, 1)">
      ]
    },
    </span>"lib"<span style="color: rgba(0, 0, 0, 1)">: [
      </span>"esnext"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"dom"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"dom.iterable"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"scripthost"<span style="color: rgba(0, 0, 0, 1)">
    ]
},
</span>"include"<span style="color: rgba(0, 0, 0, 1)">: [
    </span>"src/**/*.ts"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"src/**/*.js"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"src/**/*.tsx"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"src/**/*.vue"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"tests/**/*.ts"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"tests/**/*.tsx"<span style="color: rgba(0, 0, 0, 1)">
],
</span>"exclude"<span style="color: rgba(0, 0, 0, 1)">: [
    </span>"node_modules"<span style="color: rgba(0, 0, 0, 1)">,
    </span>"src/assets/json/*.json"<span style="color: rgba(0, 0, 0, 1)">
]
}</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> tslint.json</span>
<span style="color: rgba(0, 0, 0, 1)">
{
</span>"defaultSeverity": "warning"<span style="color: rgba(0, 0, 0, 1)">,
</span>"extends"<span style="color: rgba(0, 0, 0, 1)">: [
    </span>"tslint:recommended"<span style="color: rgba(0, 0, 0, 1)">
],
</span>"linterOptions"<span style="color: rgba(0, 0, 0, 1)">: {
    </span>"exclude"<span style="color: rgba(0, 0, 0, 1)">: [
      </span>"node_modules/**"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"src/assets/json/*.json"<span style="color: rgba(0, 0, 0, 1)">
    ]
},
</span>"rules"<span style="color: rgba(0, 0, 0, 1)">: {
    </span>"quotemark": [<span style="color: rgba(0, 0, 255, 1)">true</span>, "single"<span style="color: rgba(0, 0, 0, 1)">],
    </span>"indent": [<span style="color: rgba(0, 0, 255, 1)">true</span>, "spaces", 2<span style="color: rgba(0, 0, 0, 1)">],
    </span>"interface-name": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"ordered-imports": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"object-literal-sort-keys": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"no-consecutive-blank-lines": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"semicolon": [<span style="color: rgba(0, 0, 255, 1)">true</span>, "never"<span style="color: rgba(0, 0, 0, 1)">],
    </span>"member-access": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"no-console": <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    </span>"max-line-length": [ <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)"> ]
}
}</span></pre>
</div>
<p>Eslint配置文件如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> .eslintrc.js</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> https://repo.advai.net/advgit/atome-fe/docs/-/blob/1667c9156ed5fa16584e510c550b5ec0f95ad627/standard/.eslintrc.js</span>
<span style="color: rgba(0, 0, 0, 1)">
module.exports </span>=<span style="color: rgba(0, 0, 0, 1)"> {
root: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
env: {
    browser: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    node: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
    es6: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
},
parser: </span>'vue-eslint-parser'<span style="color: rgba(0, 0, 0, 1)">,
extends: [
    </span>'plugin:vue/recommended'<span style="color: rgba(0, 0, 0, 1)">,
    </span>'plugin:prettier/recommended'<span style="color: rgba(0, 0, 0, 1)">,
    </span>'prettier/@typescript-eslint'<span style="color: rgba(0, 0, 0, 1)">,
    </span>'plugin:@typescript-eslint/recommended'<span style="color: rgba(0, 0, 0, 1)">,
],
plugins: [</span>'@typescript-eslint'<span style="color: rgba(0, 0, 0, 1)">],
parserOptions: {
    parser: </span>'@typescript-eslint/parser'<span style="color: rgba(0, 0, 0, 1)">,
},
rules: {
    </span>'prettier/prettier': 'error'<span style="color: rgba(0, 0, 0, 1)">,
    </span>'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off'<span style="color: rgba(0, 0, 0, 1)">,
    </span>'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'<span style="color: rgba(0, 0, 0, 1)">,
    </span>'array-bracket-spacing': 2<span style="color: rgba(0, 0, 0, 1)">,
    </span>'no-var': 2<span style="color: rgba(0, 0, 0, 1)">,
    </span>'no-eval': 2<span style="color: rgba(0, 0, 0, 1)">,
    </span>'arrow-spacing': 2<span style="color: rgba(0, 0, 0, 1)">,
    </span>'block-spacing': 2<span style="color: rgba(0, 0, 0, 1)">,
    </span>'key-spacing': 2<span style="color: rgba(0, 0, 0, 1)">,
    </span>'brace-style': 2<span style="color: rgba(0, 0, 0, 1)">,
    </span>'vue/camelcase': 2<span style="color: rgba(0, 0, 0, 1)">,
    </span>'vue/require-component-is': 0<span style="color: rgba(0, 0, 0, 1)">,
    </span>'vue/require-default-prop': 0<span style="color: rgba(0, 0, 0, 1)">,
    </span>'comma-dangle': ,
    </span>'vue/eqeqeq': ,
    </span>'object-curly-spacing': ,
    </span>'vue/singleline-html-element-content-newline': 0<span style="color: rgba(0, 0, 0, 1)">,
    </span>'vue/html-closing-bracket-newline'<span style="color: rgba(0, 0, 0, 1)">: [
      </span>2<span style="color: rgba(0, 0, 0, 1)">,
      {
      singleline: </span>'never'<span style="color: rgba(0, 0, 0, 1)">,
      multiline: </span>'always'<span style="color: rgba(0, 0, 0, 1)">,
      },
    ],
    </span>'vue/max-attributes-per-line': 0<span style="color: rgba(0, 0, 0, 1)">,
    </span>'vue/html-self-closing'<span style="color: rgba(0, 0, 0, 1)">: [
      </span>2<span style="color: rgba(0, 0, 0, 1)">,
      {
      html: {
          </span><span style="color: rgba(0, 0, 255, 1)">void</span>: 'always'<span style="color: rgba(0, 0, 0, 1)">,
          normal: </span>'never'<span style="color: rgba(0, 0, 0, 1)">,
          component: </span>'always'<span style="color: rgba(0, 0, 0, 1)">,
      },
      svg: </span>'always'<span style="color: rgba(0, 0, 0, 1)">,
      math: </span>'always'<span style="color: rgba(0, 0, 0, 1)">,
      },
    ],

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置 typescript-eslint 规则</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin/docs/rules</span>
    '@typescript-eslint/camelcase': 0, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 目前埋点有部分字段无法更换</span>
    '@typescript-eslint/no-non-null-assertion': 0, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 允许非空断言运算符</span>
    '@typescript-eslint/member-delimiter-style'<span style="color: rgba(0, 0, 0, 1)">: [
      </span>2<span style="color: rgba(0, 0, 0, 1)">,
      {
      multiline: {
          delimiter: </span>'none'<span style="color: rgba(0, 0, 0, 1)">,
          requireLast: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
      },
      singleline: {
          delimiter: </span>'semi'<span style="color: rgba(0, 0, 0, 1)">,
          requireLast: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
      },
      },
    ],
    </span>'@typescript-eslint/no-unused-vars': , <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> TODO 后期逐步替换</span>
    '@typescript-eslint/interface-name-prefix': 0<span style="color: rgba(0, 0, 0, 1)">,
    </span>'@typescript-eslint/explicit-function-return-type': 0<span style="color: rgba(0, 0, 0, 1)">,
    </span>'@typescript-eslint/no-empty-function': 0<span style="color: rgba(0, 0, 0, 1)">,
    </span>'@typescript-eslint/no-var-requires': 0<span style="color: rgba(0, 0, 0, 1)">,
    </span>'@typescript-eslint/no-use-before-define': 0<span style="color: rgba(0, 0, 0, 1)">,
    </span>'@typescript-eslint/no-explicit-any': 0, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> TODO</span>
<span style="color: rgba(0, 0, 0, 1)">},
}</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>另附参考内容(若侵权请联系本人删除)供大家学习参考:</p>
<blockquote dir="auto" data-sourcepos="11:1-11:237">
<p data-sourcepos="11:3-11:237">由于我们的项目配置可能不大一样,有的是 vue-cli 自带安装的 ESLint 或者 TSLint,有的项目没有 Lint 工具。给大家参考下 <strong>package.json</strong> , 这个是 shopintar app 项目配置后的相关内容。</p>
</blockquote>
<blockquote dir="auto" data-sourcepos="13:1-13:174">
<p data-sourcepos="13:3-13:174"><strong>PS:这里有一个小坑,eslint 版本问题导致的 bug,所以 eslint 限制了版本号在 6.5.1</strong></p>
</blockquote>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">&lt;!-- package.json 相关配置 --&gt;
<span id="LC2" class="line" lang="plaintext">{
<span id="LC3" class="line" lang="plaintext">"scripts": {
<span id="LC4" class="line" lang="plaintext">    "format": "prettier --write \"src/**/*.ts\" \"src/**/*.vue\"",
<span id="LC5" class="line" lang="plaintext">    "lint": "eslint --fix --ext .ts,.vue src"
<span id="LC6" class="line" lang="plaintext">},
<span id="LC7" class="line" lang="plaintext">"husky": {
<span id="LC8" class="line" lang="plaintext">    "hooks": {
<span id="LC9" class="line" lang="plaintext">      "pre-commit": "lint-staged"
<span id="LC10" class="line" lang="plaintext">    }
<span id="LC11" class="line" lang="plaintext">},
<span id="LC12" class="line" lang="plaintext">"lint-staged": {
<span id="LC13" class="line" lang="plaintext">    "src/**/*.{ts,vue}": [
<span id="LC14" class="line" lang="plaintext">      "prettier --write",
<span id="LC15" class="line" lang="plaintext">      "eslint --fix"
<span id="LC16" class="line" lang="plaintext">    ]
<span id="LC17" class="line" lang="plaintext">},
<span id="LC18" class="line" lang="plaintext">"devDependencies": {
<span id="LC19" class="line" lang="plaintext">    "@typescript-eslint/eslint-plugin": "^2.21.0",
<span id="LC20" class="line" lang="plaintext">    "@typescript-eslint/parser": "^2.20.0",
<span id="LC21" class="line" lang="plaintext">    "eslint": "^6.5.1",
<span id="LC22" class="line" lang="plaintext">    "eslint-config-prettier": "^6.10.0",
<span id="LC23" class="line" lang="plaintext">    "eslint-plugin-prettier": "^3.1.2",
<span id="LC24" class="line" lang="plaintext">    "eslint-plugin-vue": "^5.2.3",
<span id="LC25" class="line" lang="plaintext">    "husky": "^4.2.3",
<span id="LC26" class="line" lang="plaintext">    "lint-staged": "^10.0.7",
<span id="LC27" class="line" lang="plaintext">    "prettier": "^1.19.1",
<span id="LC28" class="line" lang="plaintext">    "vue-eslint-parser": "^7.0.0",
<span id="LC29" class="line" lang="plaintext">}
<span id="LC30" class="line" lang="plaintext">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<ul dir="auto" data-sourcepos="48:1-57:0">
<li data-sourcepos="48:1-48:43">
<p data-sourcepos="48:3-48:43">1、首先删除 tslint.json 配置文件</p>
</li>
<li data-sourcepos="49:1-55:0">
<p data-sourcepos="49:3-49:32">2、安装 eslint 相关依赖</p>
<p data-sourcepos="51:3-51:84"><code>npm i -D eslint@6.5.1 @typescript-eslint/parser @typescript-eslint/eslint-plugin</code></p>
<blockquote data-sourcepos="53:3-54:86">
<p data-sourcepos="53:5-54:86"><strong>@typescript-eslint/parser</strong>: ESLint 专门解析 TypeScript 的解析器<br>
<strong>@typescript-eslint/eslint-plugin</strong>: 内置各种解析 TypeScript rules 插件</p>


</blockquote>


</li>
<li data-sourcepos="56:1-57:0">
<p data-sourcepos="56:3-56:36">3、新建 <strong>.eslintrc.js</strong> 文件</p>


</li>


</ul>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">parser: 'vue-eslint-parser', // 解析 .vue 文件
<span id="LC2" class="line" lang="plaintext">extends: [
<span id="LC3" class="line" lang="plaintext">'plugin:@typescript-eslint/recommended',
<span id="LC4" class="line" lang="plaintext">],
<span id="LC5" class="line" lang="plaintext">plugins: ['@typescript-eslint'],
<span id="LC6" class="line" lang="plaintext">parserOptions: {
<span id="LC7" class="line" lang="plaintext">parser: '@typescript-eslint/parser' // 解析 .ts 文件
<span id="LC8" class="line" lang="plaintext">},</span></span></span></span></span></span></span></span></code></pre>
<blockquote dir="auto" data-sourcepos="69:1-69:383">
<p data-sourcepos="69:3-69:383">注意: <strong>parser: 'vue-eslint-parser'</strong>,这里要区分和 <strong>parserOptions.parser</strong> 的区别,<strong>vue-eslint-parser</strong> 是解析 <strong>.vue</strong> 文件,而 <strong>parserOptions.parser:@typescript-eslint/parser</strong> 是我们自定义来解析 <strong>TypeScript</strong> 文件的,否则就无法正确的检验 TypeScript 相关内容</p>
</blockquote>
<h3 dir="auto" data-sourcepos="71:1-71:34">二、安装 eslint-plugin-vue</h3>
<p dir="auto" data-sourcepos="73:1-73:70"><code>eslint-plugin-vue</code> 插件是用来检测和规范 Vue 代码的风格</p>
<p dir="auto" data-sourcepos="75:1-75:28"><code>npm i -D eslint-plugin-vue</code></p>
<p dir="auto" data-sourcepos="77:1-77:52">然后在 <code>.eslintrc.js</code> 新增配置和相关规则</p>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">extends: [
<span id="LC2" class="line" lang="plaintext">'plugin:vue/recommended', // 这里也可以启用其他规则,如默认的 vue/essential
<span id="LC3" class="line" lang="plaintext">'plugin:@typescript-eslint/recommended',
<span id="LC4" class="line" lang="plaintext">],
<span id="LC5" class="line" lang="plaintext">rules: {
<span id="LC6" class="line" lang="plaintext">    ...
<span id="LC7" class="line" lang="plaintext">}</span></span></span></span></span></span></span></code></pre>
<h3 dir="auto" data-sourcepos="89:1-89:25">三、安装 prettier</h3>
<p dir="auto" data-sourcepos="91:1-91:113">prettier 用来做格式化工具配合我们的 ESLint 可以更大的发挥作用,首先安装相关依赖:</p>
<pre class="code highlight js-syntax-highlight plaintext white"><code>npm i -D prettier eslint-config-prettier eslint-plugin-prettier</code></pre>
<blockquote dir="auto" data-sourcepos="97:1-98:74">
<p data-sourcepos="97:3-98:74"><strong>eslint-config-prettier</strong>: 这个插件的作用是当 ESLint 和 prettier 配置冲突时优先 prettier<br>
<strong>eslint-plugin-prettier</strong>: 将 prettier 作为 ESLint 规范来使用</p>


</blockquote>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">extends: [
<span id="LC2" class="line" lang="plaintext">'plugin:vue/recommended',
<span id="LC3" class="line" lang="plaintext">'plugin:prettier/recommended',
<span id="LC4" class="line" lang="plaintext">'prettier/@typescript-eslint', // 优先 prettier 中的样式规范
<span id="LC5" class="line" lang="plaintext">'plugin:@typescript-eslint/recommended',
<span id="LC6" class="line" lang="plaintext">],</span></span></span></span></span></span></code></pre>
<p dir="auto" data-sourcepos="109:1-109:59">接着按需配置 prettier,新建 <strong>.prettierrc</strong> 文件</p>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">{
<span id="LC2" class="line" lang="plaintext">"singleQuote": true,
<span id="LC3" class="line" lang="plaintext">"tabWidth": 2,
<span id="LC4" class="line" lang="plaintext">"useTabs": false,
<span id="LC5" class="line" lang="plaintext">"semi": false,
<span id="LC6" class="line" lang="plaintext">"trailingComma": "all",
<span id="LC7" class="line" lang="plaintext">"printWidth": 120
<span id="LC8" class="line" lang="plaintext">}</span></span></span></span></span></span></span></span></code></pre>
<p dir="auto" data-sourcepos="122:1-122:163">到这里 ESLint 和 prettier 相关配置已经完成,接下来我们利用一些工具帮我们在 <strong>git commit</strong> 阶段完成代码格式化和校验工作。</p>
<h3 dir="auto" data-sourcepos="124:1-124:96">四、使用 husky 和 lint-staged 钩子完成校验与格式化</h3>
<h3 dir="auto" data-sourcepos="126:1-126:29">五、Vscode 相关配置</h3>
<ul dir="auto" data-sourcepos="128:1-130:0">
<li data-sourcepos="128:1-128:109">安装 <code>ESLint, Vertur, Prettier</code> 插件,如果你用 <code>stylus</code> 建议装一个 <code>Manta's Stylus Supremacy</code></li>
<li data-sourcepos="129:1-130:0">配置 <code>setting.json</code></li>
</ul>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">{
<span id="LC2" class="line" lang="plaintext">"editor.formatOnSave": true,
<span id="LC3" class="line" lang="plaintext">"editor.codeActionsOnSave": {
<span id="LC4" class="line" lang="plaintext">    "source.fixAll.eslint": true
<span id="LC5" class="line" lang="plaintext">},
<span id="LC6" class="line" lang="plaintext">"vetur.format.defaultFormatter.ts": "prettier",
<span id="LC7" class="line" lang="plaintext">"vetur.format.defaultFormatter.js": "prettier",
<span id="LC8" class="line" lang="plaintext">"vetur.format.defaultFormatter.less": "prettier",
<span id="LC9" class="line" lang="plaintext">"vetur.format.defaultFormatter.stylus": "stylus-supremacy",
<span id="LC10" class="line" lang="plaintext">"vetur.format.defaultFormatter.html": "prettyhtml",
<span id="LC11" class="line" lang="plaintext">"vetur.format.defaultFormatterOptions": {
<span id="LC12" class="line" lang="plaintext">    "prettyhtml": {
<span id="LC13" class="line" lang="plaintext">      "printWidth": 120
<span id="LC14" class="line" lang="plaintext">    }
<span id="LC15" class="line" lang="plaintext">},
<span id="LC16" class="line" lang="plaintext">"eslint.options": {
<span id="LC17" class="line" lang="plaintext">    "extensions": [
<span id="LC18" class="line" lang="plaintext">      ".js",
<span id="LC19" class="line" lang="plaintext">      ".vue",
<span id="LC20" class="line" lang="plaintext">      ".ts",
<span id="LC21" class="line" lang="plaintext">      ".tsx"
<span id="LC22" class="line" lang="plaintext">    ]
<span id="LC23" class="line" lang="plaintext">},
<span id="LC24" class="line" lang="plaintext">// 以下为 stylus 配置
<span id="LC25" class="line" lang="plaintext">"stylusSupremacy.insertColons": false, // 是否插入冒号
<span id="LC26" class="line" lang="plaintext">"stylusSupremacy.insertSemicolons": false, // 是否插入分好
<span id="LC27" class="line" lang="plaintext">"stylusSupremacy.insertBraces": false, // 是否插入大括号
<span id="LC28" class="line" lang="plaintext">"stylusSupremacy.insertNewLineAroundImports": false, // import之后是否换行
<span id="LC29" class="line" lang="plaintext">"stylusSupremacy.insertNewLineAroundBlocks": false
<span id="LC30" class="line" lang="plaintext">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<blockquote dir="auto" data-sourcepos="164:1-164:205">
<p data-sourcepos="164:3-164:205"><code>setting.json</code> 可以直接复制在本地,也可以在项目中新建一个 <code>.vscode</code> 文件夹,然后在 <code>.gitignore</code> 中把 <code>.vscode</code> 去掉,这样团队都可以共享这部分 vscode 配置。</p>
</blockquote>
<h3 dir="auto" data-sourcepos="166:1-166:10">总结</h3>
<p dir="auto" data-sourcepos="168:1-168:473">通过以上几步我们可以在 <code>git commit</code> 之前自动帮我们完成格式化和校验的工作,但是值得注意的是,这里的格式化和校验并不是全局的,而是我们当前提交的内容,如果我们想要格式化全局代码或者校验全局代码,这里我们可以在 <code>package.json</code> 中的 <code>script</code> 写个钩子需要的时候手动执行一下,而不是把它放在 <code>pre-commit</code> 钩子上每次 <code>git commit</code> 都执行,耗费时间。</p>
<pre class="code highlight js-syntax-highlight plaintext white"><code><span id="LC1" class="line" lang="plaintext">"scripts": {
<span id="LC2" class="line" lang="plaintext">"format": "prettier --write \"src/**/*.ts\" \"src/**/*.vue\"",
<span id="LC3" class="line" lang="plaintext">"lint": "eslint --fix --ext .ts,.vue src"
<span id="LC4" class="line" lang="plaintext">}</span></span></span></span></code></pre>
<p dir="auto" data-sourcepos="177:1-177:119">另外各种插件因为版本问题导致的冲突一般都可以在对应插件的 <code>github issues</code> 中找到答案。</p><br><br>
来源:https://www.cnblogs.com/chenbeibei520/p/12435320.html
頁: [1]
查看完整版本: vue+typescript项目中eslint,tslint配置