VSCode扩展工具 2. 格式化工具Prettier

2,580 阅读5分钟

格式化工具Prettier

image.png

  1. 安装:

    • vscode侧边栏扩展 -> 搜索Prettier -> 安装

      截止20210929 Prettier最新版本:Prettier - Code formatter 7.1.1

  2. 快捷键使用:Shift + alt + f

  3. 定制Prettier配置项settings.json:

    {
      /*  Prettier ->Start  */
      "prettier.printWidth": 100, // 超过最大值换行
      "prettier.tabWidth": 2, // 缩进字节数
      "prettier.useTabs": false, // 缩进不使用tab,使用空格
      "prettier.semi": true, // 句尾添加分号
      "prettier.singleQuote": true, // 使用单引号代替双引号
      "prettier.proseWrap": "preserve", // 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行
      "prettier.arrowParens": "avoid", //  (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号
      "prettier.bracketSpacing": true, // 在对象,数组括号与文字之间加空格 "{ foo: bar }"
      "prettier.endOfLine": "auto", // 结尾是 \n \r \n\r auto
      "prettier.htmlWhitespaceSensitivity": "ignore",
      "prettier.ignorePath": ".prettierignore", // 不使用prettier格式化的文件填写在项目的.prettierignore文件中
      "prettier.jsxBracketSameLine": true, // 在jsx中把'>' 是否单独放一行,不适用于自关闭元素
      "prettier.jsxSingleQuote": false, // 在jsx中使用单引号代替双引号
      "prettier.requireConfig": false, // Require a 'prettierconfig' to format prettier
      "prettier.trailingComma": "es5", // 在对象或数组最后一个元素后面是否加逗号(在ES5中加尾逗号)
      "terminal.integrated.allowMnemonics": true,
      "terminal.integrated.automationShell.linux": "", // 不让prettier使用tslint的代码格式进行校验
      "prettier.vueIndentScriptAndStyle": true, // 是否缩进Vue 文件中的代码<script>和<style>标签
      /* 当 requirePragma 和 insertPragma 两个选项同时使用时,--require-pragma具有优先权 */
      "prettier.requirePragma": false, // 需要写文件开头的 @prettier
      "prettier.insertPragma": true, // 在文件顶部插入一个特殊标记'@format',指定文件已使用 Prettier 格式化
      "prettier.quoteProps": "as-needed", // 仅在需要时在对象属性周围添加引号
      "prettier.embeddedLanguageFormatting": "auto", // 自动识别嵌入代码,对其进行格式化, 如在 JavaScript 中带有标记的标记模板html或 Markdown 代码块
      "[vue]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
      },
      "[jsonc]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
      },
      "[html]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
      },
      "[javascript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
      },
      "[typescript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
      },
      /* Prettier ->End */
    }
    

    image.png

  4. Prettier的三种配置:.prettierrc.js , .editorconfig , settings.json

    前两者.prettierrc , .editorconfig是针对于项目配置,后者settings.json是编辑器的整体配置
    切记:如果要配置在项目中,别忘了安装prettier依赖:npm install [--save-dev|--global] prettier

    • .editorconfig :
      1. 在项目根目录下新建.editorconfig文件
      2. editorconfig 官方文档
      3. .editorconfig配置示例:
        # 告诉prettier扩展,这是根文件,不用继续往上查找
        root = true
        
        # 匹配全部文件
        [*]
        
        # 设置字符集
        charset = utf-8
        
        # 缩进风格,可选"space"、"tab"
        indent_style = tab 
        
        # 缩进的空格数
        indent_size = 4
        
        # 结尾换行符,可选"lf"、"cr"、"crlf"
        end_of_line = lf
        
        # 在文件结尾插入新行
        insert_final_newline = true
        
        # 删除一行中的前后空格
        trim_trailing_whitespace = true
        
        image.png
    • .prettierrc.js
      1. 在项目根目录下新建.prettierrc.js文件
      2. prettier 官方配置文档
        • 配置内容有多种数据类型方式:JSON、JS、YAML、TOML
        • 在此本人选择新建.prettierrc.js
          • 不选择新建.prettierrc.prettierrc.json的原因
            1. 一方面是因为这两种文件无法注释
            2. 一方面可将VSCode编辑器settings.jsonprettier内容直接拿来微调配置
        • .prettierrc.js配置示例:
        module.exports = {
          /*  Prettier ->Start  */
          "printWidth": 100, // 超过最大值换行
          "tabWidth": 2, // 缩进字节数
          "useTabs": false, // 缩进不使用tab,使用空格
          "semi": true, // 句尾添加分号
          "singleQuote": true, // 使用单引号代替双引号
          "proseWrap": "preserve", // 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行
          "arrowParens": "avoid", //  (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号
          "bracketSpacing": true, // 在对象,数组括号与文字之间加空格 "{ foo: bar }"
          "endOfLine": "auto", // 结尾是 \n \r \n\r auto
          "htmlWhitespaceSensitivity": "ignore",
          "ignorePath": ".prettierignore", // 不使用prettier格式化的文件填写在项目的.prettierignore文件中
          "jsxBracketSameLine": true, // 在jsx中把'>' 是否单独放一行,不适用于自关闭元素
          "jsxSingleQuote": false, // 在jsx中使用单引号代替双引号
          "requireConfig": false, // Require a 'prettierconfig' to format prettier
          "trailingComma": "es5", // 在对象或数组最后一个元素后面是否加逗号(在ES5中加尾逗号)
          "terminal.integrated.allowMnemonics": true,
          "terminal.integrated.automationShell.linux": "", // 不让prettier使用tslint的代码格式进行校验
          "vueIndentScriptAndStyle": true, // 是否缩进Vue 文件中的代码<script>和<style>标签
          /* 当 requirePragma 和 insertPragma 两个选项同时使用时,--require-pragma具有优先权 */
          "requirePragma": false, // 需要写文件开头的 @prettier
          "insertPragma": true, // 在文件顶部插入一个特殊标记'@format',指定文件已使用 Prettier 格式化
          "quoteProps": "as-needed", // 仅在需要时在对象属性周围添加引号
          "embeddedLanguageFormatting": "auto", // 自动识别嵌入代码,对其进行格式化, 如在 JavaScript 中带有标记的标记模板html或 Markdown 代码块
          "overrides": [], // 针对特定文件覆盖配置
          /* Prettier ->End */
        }
        
        image.png
  5. Prettier的三种配置的优先级:.prettierrc.js > .editorconfig > settings.json

    1. 以上从最开始编辑器安装Prettier-Code formatter扩展,配置settings.json, 然后Shift + alt + f格式化,查看展示效果
    2. 再在项目中安装prettier依赖, 在项目根目录下新建.editorconfig文件进行配置, 然后Shift + alt + f格式化,查看展示效果
    3. 最后在项目根目录下新建.prettierrc.js 文件进行配置, 然后Shift + alt + f格式化,查看展示效果
    4. 到了现在,.prettierrc.js.editorconfigsettings.json三种配置已然都已配置完成,细心的你会发现:
      1. 配置优先级:.prettierrc.js > .editorconfig > settings.json

      2. 如果项目存在.prettierrc.js.editorconfig至少一个,那么配置项按两者优先级文件进行格式化

      3. 如果某一选项.prettierrc.js.editorconfig这两个配置文件都没有配置该项,则取Prettier插件默认值,不会去取settings.json的值,除非.prettierrc.js.editorconfig这两个文件都不存在

        • 如表所示:unset:表示不设置,||×:表示配置文件存在与否 | | .prettierrc.js | .editorconfig | settings.json | tabWidth取值 | | --- | --- | --- | --- | --- | | tabWidth | 1 | 10 | 100 | 1 | | tabWidth | 1 | unset | 100 | 1 | | tabWidth | unset | 1 | 100 | 1 | | tabWidth | unset | unset | 100 | 2 | | tabWidth | x | 10 | 100 | 10 | | tabWidth | x | √ & unset | 100 | 2 | | tabWidth | x | x | 100 | 100 | | tabWidth | x | x | unset | 2 |
  6. 使用时可能出现的问题:

    • 安装完后第一次使用Prettier格式化功能时,编辑器会弹框提示用户进行操作 image.png
      • 如果选择操作项是Dency取消,则将无法使用Perttier格式化功能 image.png

      • 出现以上情况,则Ctrl + shift + p快捷键打开命令窗口,输入搜索内容Prettier,点击选择Prettier: Reset Module Execution State,重置扩展执行状态 image.png

        下次Shift + alt + f使用格式化功能,编辑器将重新弹框,让用户再次选择操作项