vue-cli4 ESLint + prettier 修改插件规则实例

prettier规则配置项 Options

一般不太会去修改、或默认格式就挺好的部分属性就不列了,有需要可以去官网查阅API

  • tabWidth - 默认值 2,缩进级别的空格数
  • useTabs - 默认值 false,true 表示用tab代替space来作为缩进的单位
  • semi - 默认值 true,表示在每个语句的末尾添加分号
  • singleQuote - 默认值 false,true则表示使用单引号而不是双引号
  • jsxSingleQuote - 默认值 false,true则表示在JSX中使用单引号而不是双引号
  • jsxBracketSameLine - 默认值 false,true则表示在多行JSX元素中将>放在最后一行的末尾,而不是单独放在下一行,像这样:
// "jsxBracketSameLine":true


  • trailingComma - 默认值 es5,即在es5中给数组/对象的末尾元素加上逗号,如果个人习惯不加逗号的话就改成 "none"
  • arrowParens - 默认 always,当箭头函数只有一个参数是不省略 (),建议是保留,但个人习惯是改成 avoid(即省略括号)
  • proseWrap 默认值 preserve,即按原样包装markdown文本(保持原本的折行),never 是软折行(当屏幕放不下时才折行), always 是超过 printWidth 就折行
prettier支持的几种配置方式(按优先级):Configuration
  • package.json中的"prettier"属性。
  • 项目根目录下.prettierrc(JSON 或 YAML格式)
  • 项目根目录下.prettierrc.jsprettier.config.js,用module.exports导出一个对象

我喜欢用 .prettierrc(JSON格式) ,简洁直观,作为独立文件又方便维护;但prettier.config.js又方便注释,看个人需求

{
  "semi": false,
  "singleQuote": true,
  "trailingComma": "none",
  "printWidth": 120,
  "arrowParens": "avoid",
  "bracketSpacing": true,
  "jsxSingleQuote": true,
  "jsxBracketSameLine": true
}
保存文件的时候用 prettier 规则自动格式化

我的编辑器是VSCode,对应的 prettier 插件地址:Prettier - Code formatter
另外,可以去这个 vscode扩展市场查看插件怎么在vscode配置,里面一般有API文档或地址。

我们先在扩展商店安装这个插件:

再给用户或工作区的 settings.json 根据需求做如下配置:

// settings.json
{
  "editor.formatOnSave": true, // 保存文件时自动格式化
  "editor.insertSpaces": true,
  "editor.tabSize": 2,
  "editor.formatOnSave": true, // 保存文件时自动格式化
  "eslint.run": "onSave",
  "editor.defaultFormatter": "esbenp.prettier-vscode", // 设置 prettier 为 默认格式化程序
  "[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode" // 为特定语言设置格式化程序
  }
}

想给不同语言配置不同的自动化格式,都可以像上面那样单独写,比如 jsonc、 [javascriptreact](JavaScript React)等,不清楚的化,可以查找下对应的语言标识符。
对了,我们当然可以直接在VSCode的【设置】功能配置插件(如Prettier)的各项options,然后这些设置会被自动添加到相应的settings.json(用户或工作区/即当前项目)里,和我们手动编辑settings.json是一样的。虽然这样貌似更容易和直观,但优先级肯定还是.prettierrc高,而且它作为一个独立文件更方便维护。

为什么需要在类似.prettierrc的配置文件修改规则,而不是在直接在eslintrc.js做prettier的配置呢?

eslint-plugin-prettier 插件的文档上明确告诉我们了:
虽然可以通过ESLint配置文件eslintrc.js将选项传递给Prettier,但不建议这样做,因为像Prettier - Code formatter这样的编辑器扩展插件会读取. pretierrc,却不会从ESLint读取设置,这会导致矛盾的体验。

eslintrc.js 可做的 prettier 的配置项有:

  • 一:传递需要修改的配置参数
rules: {
  "prettier/prettier": ["error", {"singleQuote": true, "semi": false, "parser": "flow"}]
}
  • 二:不启用.pretierrc文件的配置,如果正在使用的多个工具相互冲突,或者不希望将ESLint设置与Prettier配置混合使用,可能会很有用。不然实在没必要这样做。
rules: {
  'prettier/prettier': ['error', {}, { usePrettierrc: false }]
}
延伸:怎么知道脚手架项目具体用了哪些ESLint配置和插件?

当我们的eslintrc.js配置里有 extends 扩展包的时候,这些扩展都是大大们精细封装好的,可能集成了多个插件并加上自身的规则,就像"plugin:vue/essential"、"@vue/prettier",未必能直观看出用了什么eslint插件。
比如当eslint报错的时候,我们看到warning来自prettier,肯定要找和prettier相关的插件。
在这篇:➡️ ESLint配置规则详解和常用配置,我们详细捋清了vue-cli4 ESLint + prettier 最终的 ESLint 默认配置,除了一些自定义的规则,还依赖于 eslint-plugin-vue、eslint-plugin-prettier、eslint 本身。寻找思路示例截图:

清楚用了什么插件有什么意义呢?那就是当我们不知道怎么修改/覆盖规则的时候,多个地方找答案咯。甚至取巧地在插件导出的模块对象里直接修改配置(不建议,因为更新包可能会被覆盖掉)。查官方文档总是比哐哐百度有用得多,因为官方的信息至少是实时更新的。

我的eslintrc.js配置:
module.exports = {
  root: true,
  env: {
    node: true
  },
  extends: ['plugin:vue/essential', 'eslint:recommended', '@vue/prettier'],
  parserOptions: {
    parser: 'babel-eslint'
  },
  rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    semi: ['warn', 'never'], // 语句末尾不加分号
    quotes: ['warn', 'single'], // 默认使用单引号
    'jsx-quotes': ['warn', 'prefer-single'], // JSX属性中使用一致的单引号
    'space-before-function-paren': ['warn', { anonymous: 'never', named: 'never', asyncArrow: 'always' }], // 在具名函数/和匿名函数名(function)后面不要留空格
    'array-bracket-newline': ['error', 'consistent'], // 数组两个[ ]之间需要一致的换行符
    'array-element-newline': ['error', 'consistent'], // 数组元素之间保持一致的换行符
    'comma-dangle': ['error', 'never'] // 数组/对象末位元素不加逗号
    'multiline-ternary': ['error', 'always-multiline'], // 如果三元表达式自身跨越多个行,则在三元表达式的操作数(: / ? / && )之间强制换行。
    'object-property-newline': ['error', { allowAllPropertiesOnSameLine: true }], // 允许对象属性不换行,默认是强制换行
    'no-else-return': 'error', // if 内有 return 不允许结束后再跟 else
    'no-unused-vars': 'off', // 禁止有声明了却未使用的变量。暂时注释掉也会报错,所以注掉
    'no-unused-components': 'off' // 禁止有注册了却未使用的组件,原因同上
  }
}
修改配置之前,这只是冰山一角

修改配置之后,清清爽爽连 warning 都是 0,怎么说呢,这个feel倍儿爽~

你可能感兴趣的:(vue-cli4 ESLint + prettier 修改插件规则实例)