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

prettier规则配置项 Options

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

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

<button
  className="prettier-class"
  id="prettier-id"
  onClick={this.handleClick}>
  Click Here
</button>
  • trailingComma:<es5|none|all> - 默认值 es5,即在es5中给数组/对象的末尾元素加上逗号,如果个人习惯不加逗号的话就改成 "none"
  • arrowParens:<always|avoid> - 默认 always,当箭头函数只有一个参数是不省略 (),建议是保留,但个人习惯是改成 avoid(即省略括号)
  • proseWrap:<always|never|preserve> 默认值 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倍儿爽~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,561评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,205评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 124,628评论 2 7