- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
格式化工具Prettier
-
安装:
- vscode侧边栏
扩展-> 搜索Prettier-> 安装截止20210929 Prettier最新版本:
Prettier - Code formatter 7.1.1
- vscode侧边栏
-
快捷键使用:
Shift + alt + f -
定制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 */ } -
Prettier的三种配置:
.prettierrc.js,.editorconfig,settings.json前两者
.prettierrc,.editorconfig是针对于项目配置,后者settings.json是编辑器的整体配置
切记:如果要配置在项目中,别忘了安装prettier依赖:npm install [--save-dev|--global] prettier.editorconfig:- 在项目根目录下新建
.editorconfig文件 - editorconfig 官方文档
.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
- 在项目根目录下新建
.prettierrc.js:- 在项目根目录下新建
.prettierrc.js文件 - prettier 官方配置文档
- 配置内容有多种数据类型方式:JSON、JS、YAML、TOML
- 在此本人选择新建
.prettierrc.js- 不选择新建
.prettierrc或.prettierrc.json的原因- 一方面是因为这两种文件无法注释
- 一方面可将VSCode编辑器
settings.json的prettier内容直接拿来微调配置
- 不选择新建
.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 */ }
- 在项目根目录下新建
-
Prettier的三种配置的优先级:
.prettierrc.js>.editorconfig>settings.json- 以上从最开始编辑器安装
Prettier-Code formatter扩展,配置settings.json, 然后Shift + alt + f格式化,查看展示效果 - 再在项目中安装
prettier依赖, 在项目根目录下新建.editorconfig文件进行配置, 然后Shift + alt + f格式化,查看展示效果 - 最后在项目根目录下新建
.prettierrc.js文件进行配置, 然后Shift + alt + f格式化,查看展示效果 - 到了现在,
.prettierrc.js、.editorconfig、settings.json三种配置已然都已配置完成,细心的你会发现:-
配置优先级:
.prettierrc.js>.editorconfig>settings.json -
如果项目存在
.prettierrc.js、.editorconfig至少一个,那么配置项按两者优先级文件进行格式化 -
如果某一选项
.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 |
- 如表所示:
-
- 以上从最开始编辑器安装
-
使用时可能出现的问题:
- 安装完后第一次使用Prettier格式化功能时,编辑器会弹框提示用户进行操作
-
如果选择操作项是
Dency或取消,则将无法使用Perttier格式化功能 -
出现以上情况,则
Ctrl + shift + p快捷键打开命令窗口,输入搜索内容Prettier,点击选择Prettier: Reset Module Execution State,重置扩展执行状态下次
Shift + alt + f使用格式化功能,编辑器将重新弹框,让用户再次选择操作项
-
- 安装完后第一次使用Prettier格式化功能时,编辑器会弹框提示用户进行操作