【Prettier】代码格式化工具Prettier的使用和配置介绍
前言
前段时间,因为项目的prettier的配置和eslint格式检查有些冲突,在其prettier官网和百度了一些配置相关的资料,在此做一些总结,以备不时之需。
Prettier官网
Prettier
Prettier 是一种前端代码格式化工具,支持javascript、jsx、typescript、css,less和scss、html、vue、angular、json、markdown等多种前端技术语言格式化。
使用prettier的原因有很多,我认为大部分是因为它可以将项目代码格式统一,还有格式化后的代码较美观和易于理解。
使用 Prettier
vscode 使用
要充分利用 Prettier,建议在编辑器中运行它。在vscode的扩展中可以直接查找prettier插件。
安装成功后,在你打开支持的文件时,下方文件信息状态栏会有prettier标致:
双击它或者直接在输出命令窗口那里查看prettier的日志信息:
从日志这里可以看出,它是优先使用项目中的prettier配置的。
另外,一般你下载代码格式化插件,都是搭配vscode的文件自动保存格式的(这样方便),但是注意,这个自动保存格式化使用的是文件的默认格式化配置。
有的时候你发现prettier配置保存时格式化规则不起作用,可能就是默认格式化配置没切换到prettier。所以记得将格式化的默认配置修改为prettier。
开启格式化自动保存。
修改prettier插件配置,设置-》扩展-》prettier 即可改变配置:
设置好后,就可以使用prettier格式化代码了。
项目中使用
如果你想使用prettier,建议项目中一定要安装prettier和统一好格式化规则。
首先下载prettier依赖,为你的项目添加格式化依赖。例如:
npm install --save-dev prettier
然后,添加prettier配置文件。配置文件写法有点多,我选择以 JSON 或 YAML 编写的 .prettierrc 文件。
多种配置文件风格可参考:prettier-configuration File
.prettierrc文件json:
{"experimentalTernaries": false,"printWidth": 80,"tabWidth": 2,"useTabs": false,"semi": true,"singleQuote": false,"quoteProps": "as-needed","jsxSingleQuote": false,"trailingComma": "all","bracketSpacing": true,"bracketSameLine": false,"arrowParens": "always","rangeStart": 0,"proseWrap": "preserve","htmlWhitespaceSensitivity": "css","vueIndentScriptAndStyle": false,"endOfLine": "lf","embeddedLanguageFormatting": "auto","singleAttributePerLine": false,"plugins": []
}
默认情况下,Prettier 会忽略版本控制系统目录(“.git”、“.sl”、“.svn “和”.hg”)和 node_modules 中的文件(除非指定了 CLI 选项 --with-node-modules )。如果".gitignore "文件存在于运行 Prettier 的同一目录中,Prettier 也会遵循该文件中指定的规则。
**/.git
**/.svn
**/.hg
**/node_modules
另外,要排除指定的格式化文件,请在项目根目录下创建 .prettierignore 文件。.prettierignore 使用 gitignore 语法。
格式该目录及子目录下的文件:
npx prettier . --write
检查目录及子目录文件格式化情况:
npx prettier . --check
npx 随 npm 提供,可让你运行本地安装的工具。在执行命令前记得先安装prettier依赖包,不然npx会下载最新版的prettier格式化代码。
Prettier 配置
简单介绍下prettier的格式化配置。
建议使用.prettierrc配置,虽然它不能写注释,但优先级比较高,不容易被覆盖。
export default {// 三元符 ?experimentalTernaries: false,// 单引号singleQuote: true,trailingComma: 'all',endOfLine: 'auto',bracketSpacing: true,
};
Experimental Ternaries 三元符
默认为false。
// 三元符 ?experimentalTernaries: false,
参数:
- true ——三元符在条件后加上问号。
- false—— 默认值,保留三元组的默认行为;将问号与结果保留在同一行。
在 prettier 的新三元格式成为默认行为之前,请先试用一下。
Print Width 一行代码宽度
指定编辑器换行的行长。默认80,上图格式化后就被换行了。
// 行打印长度printWidth: 80,
在 .editorconfig 文件中设置 max_line_length 将配置 Prettier 的打印宽度,除非被覆盖。
(如果在格式化 Markdown 时不想换行,可以设置 Prose Wrap 选项来禁用)。
Tab Width Tab缩进宽度
指定每个缩进级的空格数。默认一个Tab制表符两个空格。
// 制表符空格数,默认2tabWidth: 2,
在 .editorconfig 文件中设置 indent_size 或 tab_width 将配置 Prettier 的制表符宽度,除非被覆盖。
Tabs 制表符
用制表符代替空格缩进行间距。
// 用制表符代替空格缩进行间距。useTab: true,
在 .editorconfig 文件中设置 indent_style 将配置 Prettier 的制表符用法,除非被覆盖。
(制表符将用于缩进,但 Prettier 会使用空格对齐,例如在三元组中。这种行为被称为 SmartTabs)。
Semicolons 行尾分号
在语句末尾打印分号。默认值为true
参数:
- true —— 在每条语句末尾加上分号。
- false —— 只在有可能出错的地方行尾添加分号。
// 行尾分号semi:true,
Quotes 引号
使用单引号而不是双引号。默认false。jsx不受此影响。
// 单引号singleQuote: false,
Quote Props 属性的引号
在引用对象中的属性时进行更改。默认值为 as-needed。
参数:
- as-needed —— 仅在需要时在对象属性前加上引号。(如果它判断不需要引号,则会把你自己加的引号去掉。)
- consistent —— 如果对象中至少有一个属性需要引号,则引用所有属性。(只要有一个加,其他属性都加)
- preserve——尊重对象属性中引号的输入使用。(你想加就加,它不改你的)
"quoteProps": "as-needed",
consistent 效果:
JSX Quotes JSX的引号
在 JSX 中使用单引号而不是双引号。默认值为false。
Trailing Commas 尾部逗号
在多行逗号分隔的语法结构中尽可能打印尾逗号,默认值all。(例如,单行数组永远不会有尾逗号)。
参数:
- all —— 尽可能使用逗号(包括函数参数和调用)。要运行这种格式的 JavaScript 代码,需要一个支持 ES2017 的引擎(Node.js 8+ 或现代浏览器)或降级编译。这也能在 TypeScript 的类型参数中使用尾部逗号(自 2018 年 1 月发布的 TypeScript 2.7 起支持)。
- es5 —— ES5 中有效的尾逗号(对象、数组等)。TypeScript 和 Flow 中类型参数中的尾逗号。
- none—— 无尾逗号。
"trailingComma": "all",
all的情况:
Bracket Spacing 空格间隔
打印对象字面量中括号之间的空格。默认值为true
参数:
-true —— 开启,示例:{ foo: bar }。
-false—— 关闭,示例:{foo: bar}。
"bracketSpacing": true,
true的情况:
Bracket Line
将多行 HTML(HTML、JSX、Vue、Angular)元素的 > 放在最后一行的末尾,而不是单独放在下一行(不适用于自关闭元素)。默认值false。
"bracketSameLine": false,
Arrow Function Parentheses 箭头函数括号
在唯一的箭头函数参数周围加上括号。默认值always。
参数:
- always—— 一定要包括括号。例如: (x) => x。
- avoid—— 尽可能省略括号。例如:x => x。
"arrowParens": "always"
Range 文件格式化范围
只格式化文件的一个片段
这两个选项可用于格式化以给定字符偏移(分别为包含和不包含)为起点和终点的代码。范围将扩展:
- 后退至包含所选语句的第一行的起始位置。
- 向前到所选语句的末尾。
前后由rangeStart和rangeEnd控制,rangeStart默认为0,rangeEnd默认Infinity,在不指定具体末尾值时,不配置rangeEnd即可。
"rangeStart": 0,
Parser 解析器
指定要使用的解析器。
Prettier 会根据输入文件路径自动推断解析器,因此无需更改此设置。
Prose Wrap 折行
默认情况下,Prettier会因为使用了一些折行敏感型的渲染器(如GitHub comment 和 BitBucket)而按照markdown文本样式进行折行。
但在某些情况下,可能只是希望这个文本在编译器或查看器中当屏幕放不下时发生软折行,所以这一参数允许设置为 never。
参数:
- always—— 当超出print width(上面有这个参数)时就折行。
- perserve—— 按照原有文本进行折行。
- never——不折行。
HTML Whitespace Sensitivity 模板留白
默认值css。
为 HTML、Vue、Angular 和 Handlebars 指定全局空白敏感度。更多信息,请参见空白敏感格式。
参数:
- “css” - 尊重 CSS 显示属性的默认值。对于 Handlebars,与 strict 相同。
- “strict” - 所有标记周围的空格(或没有空格)都被视为重要标记。
- “ignore”- 所有标记周围的空格(或没有空格)都不重要。
"htmlWhitespaceSensitivity": "css"
Vue files script and style tags indentation Vue 文件脚本和样式标签缩进
是否缩进 Vue 文件中 <script> 和 <style> 标记内的代码。默认值false。
参数:
- false - 在 Vue 文件中不缩进脚本和样式标记。
- true - 在 Vue 文件中缩进脚本和样式标记。
"vueIndentScriptAndStyle": false
End of Line 行尾换行符
默认值lf。
参数:
- “lf” - 仅换行符(\n),常见于 Linux 和 macOS 以及 git 仓库中
- “crlf” - 回车+换行字符(\r/n),常见于 Windows 系统
- “cr” - 仅回车字符(\r),很少使用
- “auto” - 保持现有的行结束符(一个文件中的混合值通过查看第一行之后的内容进行规范化处理)
"endOfLine": "lf"
由于历史原因,文本文件中有两种常见的行结束符。即 \n(或 LF,表示换行)和 \r\n(或 CRLF,表示回车+换行)。前者常见于 Linux 和 macOS,而后者则在 Windows 中很普遍。维基百科上有一些详细的解释。
当不同操作系统的人合作开发一个项目时,很容易在共享的 git 仓库中出现混合行尾。Windows 用户也有可能不小心把以前提交过的文件的行尾从 LF 改成了 CRLF。这样做会产生很大的 git diff,从而使文件的逐行历史记录(git blame)更难查看。
如果您想确保整个 git 仓库在 Prettier 覆盖的文件中只包含 Linux 风格的行结束符:
- 确保 Prettier 的 endOfLine 选项设置为 lf(这是自 2.0.0 版起的默认值)
- 配置运行 Prettier 的预提交钩子
- 使用 --check 标志配置 Prettier 在 CI 管道中运行。如果使用 Travis CI,请在 .travis.yml 中将 autocrlf 选项设置为输入。
- 在 repo 的 .gitattributes 文件中添加 * text=auto eol=lf。更改后,您可能需要让 Windows 用户重新克隆您的 repo,以确保 git 在签出时未将 LF 转换为 CRLF。
当使用 \n (LF) 时,所有操作系统中的所有现代文本编辑器都能正确显示行结束符。但是,Windows 的旧版本记事本只能处理 \r\n (CRLF),因此会在视觉上把这些行压成一行。
Embedded Language Formatting 嵌入语言格式
控制 Prettier 是否格式化文件中嵌入的引号代码。默认值auto。
参数:
- “auto” - 如果 Prettier 能够自动识别嵌入代码,则格式化嵌入代码。
- “off” - 永远不自动格式化嵌入代码。
"embeddedLanguageFormatting": "auto"
当 Prettier 发现你在另一个文件的字符串中放置了一些它知道如何格式化的代码时,比如在 JavaScript 的标记模板中使用名为 html 的标记,或者在 Markdown 的代码块中,它默认会尝试格式化这些代码。
有时,这种行为并不可取,尤其是在你可能无意将字符串解释为代码的情况下。通过该选项,您可以在默认行为(自动)和完全禁用该功能(关闭)之间进行切换。
Single Attribute Per Line 单行一属性
在 HTML、Vue 和 JSX 中每行强制使用一个属性。默认值false。
参数:
- false - 每行不执行单一属性。
- true - 每行执行单一属性。
"singleAttributePerLine": false
plugins 插件
prettier的插件配置。
"plugins": []
结语
结束了。
相关文章:

【Prettier】代码格式化工具Prettier的使用和配置介绍
前言 前段时间,因为项目的prettier的配置和eslint格式检查有些冲突,在其prettier官网和百度了一些配置相关的资料,在此做一些总结,以备不时之需。 Prettier官网 Prettier Prettier 是一种前端代码格式化工具,支持ja…...

【计算机网络】网络基础
👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…...

MFC在对话框中实现打印和打印预览
首先在这里感谢互联网的大哥们!同时我讨厌动不动就是要vip才能查看!所以我写的不需要vip就能看。只求点个赞。 直接上代码,新建6个文件CPrintFrame.cpp;CPrintFrame.h;CPrintPreviewView.cpp;CPrintPrevie…...

移动端页面出现闪屏
v-cloak 的作用和用法 用法: 这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。官方API {{msg}} HTML 绑定 Vue实例,在页面加载时…...

elasticsearch的高亮查询三种模式查询及可能存在的问题
目录 高亮查询使用介绍 高亮参数 三种分析器 可能存在的查询问题 fvh查询时出现StringIndexOutOfBoundsException越界 检索高亮不正确 参考文档 高亮查询使用介绍 Elasticsearch 的高亮(highlight)可以从搜索结果中的一个或多个字段中获取突出显…...

【精品实战项目】深度学习预测、深度强化学习优化、附源码数据手把手教学
目录 前言 一、预测算法数据与代码介绍(torch和mxnet都有) 1.1 数据介绍 1.2 代码介绍 1.3 优化介绍 二、深度强化学习算法优化 2.1 DDPG 介绍 DPG--deterministic policy gradient DQN--deep Q-network DDPG--deep deterministic policy gradient 三、其他算法 总结…...

JavaScript 手写仿深拷贝
实现对象参数的深拷贝并返回拷贝之后的新对象,因为参数对象和参数对象的每个数据项的数据类型范围仅在数组、普通对象({})、基本数据类型中且无需考虑循环引用问题,所以不需要做过多的数据类型判断,核心步骤有…...

spring低版本设置cookie的samesite属性
场景:比较古老的项目了,ssh架子,Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,可用于防止 CSRF 攻击和用户追踪。因此需要给其字段赋值。 网上找了很多资源,由于jar版本比较低,没有…...

GPT4o编写步进电机控制代码
我给出的要求如下: 基于STM32F407 HAL库,写一个步进电机控制程序,需要控制8个步进电机,我会给出描述步进电机的结构体变量,基于这些变量需要你做出以下功能,电机脉冲通过定时器中断翻转脉冲引脚的电平实现…...

关于Spring Boot的自动配置
目录 1.EnableAutoConfiguration注解 2.SpringBootConfiguration注解 3.Import注解 4.spring.factories 5.总结 (1)EnableAutoConfiguration (2)AutoConfigurationImportSelector (3) SpringFactoriesLoade…...

## 已解决:`java.sql.SQLSyntaxErrorException: SQL语法错误` 异常的正确解决方法,亲测有效!!! ###
1. 问题描述 java.sql.SQLSyntaxErrorException 是 Java 程序在执行 SQL 查询时,因 SQL 语法错误而抛出的异常。通常情况下,错误信息会指示出错的 SQL 语句及错误原因,如拼写错误、关键字遗漏、字段名称错误等。 典型的错误信息如下&#x…...

备战秋招60天算法挑战,Day22
题目链接: https://leetcode.cn/problems/missing-number/ 视频题解: https://www.bilibili.com/video/BV1HS42197Hc/ LeetCode 268.丢失的数字 题目描述 给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组…...

在Linux下搭建go环境
下载go go官网:All releases - The Go Programming Language 我们可以吧压缩包下载到Windows上再传到Linux上,也可以直接web下载: wget https://golang.google.cn/dl/go1.23.0.linux-amd64.tar.gz 解压 使用命令解压: tar -x…...

738.单调递增的数字
738.单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时,我们称这个整数是单调递增的。 给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。 示例 1: 输入: n 10 输出: 9示例 2: 输入: n 1234 输…...

近年国际重大网络安全事件深度剖析:安全之路任重道远
引言 在当今数字化时代,网络安全已成为全球关注的焦点。随着信息技术的飞速发展,网络攻击的手段和规模也在不断升级,给个人、企业和国家带来了巨大的威胁。本文将盘点近年来国际上发生的重大网络安全事件,分析其影响和教训&#…...

Windows C++控制台菜单库开发与源码展示
Windows C控制台菜单库 声明:演示视频:一、前言二、具体框架三、源码展示console_screen_set.hframeconsole_screen_frame_base.hconsole_screen_frame_char.hconsole_screen_frame_wchar_t.hconsole_screen_frame.h menuconsole_screen_menu_base.hcons…...

ARM——驱动——Linux启动流程和Linux启动
一、flash存储器 lash存储器,全称为Flash EEPROM Memory,又名闪存,是一种长寿命的非易失性存储器。它能够在断电情况下保持所存储的数据信息,因此非常适合用于存储需要持久保存的数据。Flash存储器的数据删除不是以单个的字节为单…...

Docker和虚拟机的区别详细讲解
Docker 和虚拟机(VM)是现代 IT 基础设施中常见的技术,它们都用于在单一硬件上运行多个操作环境,但它们的工作原理、性能、资源利用和使用场景存在显著差异。以下是对 Docker 和虚拟机区别的详细讲解。 一、基础概念 1. Docker …...

leetcode_68. 文本左右对齐
68. 文本左右对齐 题目描述:给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词;也就是说,…...

python探索分形和混沌
简单产生复杂,混沌孕育秩序 0. 引言 a. 分形 fractal 【也叫碎形】 分形是一种具有自相似性和复杂结构的几何图形。在分形结构中,无论放大多少次,局部的结构特征都与整体结构相似。这种特性在自然界中广泛存在,比如树木枝干、山…...

LeetCode77 组合
前言 题目: 77. 组合 文档: 代码随想录——组合 编程语言: C 解题状态: 没尝试出来 思路 经典的组合问题,可以考虑使用回溯法。使用回溯法时可以根据回溯法的模板来考虑如何解决。 代码 回溯法 class Solution { p…...

C#:Bitmap类使用方法—第1讲
首先看一下Bitmap定义:封装 GDI 位图,此位图由图形图像及其属性的像素数据组成。 Bitmap 是用于处理由像素数据定义的图像的对象。 下面介绍一下使用的例子: Bitmap image1; private void Button1_Click(System.Object sender, System.Eve…...

PaddleNLP 3.0 支持大语言模型开发
huggingface不支持模型并行。张量并行,不满足大规模预训练的需求。 1、组网部分 2、数据流 3、训练器 4、异步高效的模型存储...

32次8.21(学习playbook-roles,脚本创建数据库和表,mycat读写分离)
1.roles目录介绍 files:⽤来存放由copy模块或script模块调⽤的⽂件。 tasks:⾄少有⼀个main.yml⽂件,定义各tasks。 handlers:有⼀个main.yml⽂件,定义各handlers。 templates:⽤来存放jinjia2模板。 vars:…...

I2C通信协议(软件I2C和硬件I2C)
相比于之前学的异步全双工且需要两条通信线的串口通信,I2C则为同步半双工,仅需要一条通信线,全双工与半双工区别如下: 全双工(Full Duplex)半双工(Half Duplex)数据传输方式同时双向…...

Linux入门——08 进程间通讯——管道
1.进程间通讯 1.1什么是通讯 进程具有独立性(每个进程都有自己的PCB,独立地址空间,页表)但是要进行进程的通信,通信的成本一定不低,打破了独立性 进程间通信目的 数据传输:一个进程需要将它的数据发送给…...

深入探讨SD NAND的SD模式与SPI模式初始化
在嵌入式系统和存储解决方案中,SD NAND的广泛应用是显而易见的。CS创世推出的SD NAND支持SD模式和SPI模式,这两种模式在功能和实现上各有优劣。在本文中,我们将深入探讨这两种模式的初始化过程,并比较它们在不同应用场景下的优劣&…...

【jvm】栈和堆的区别
目录 1. 用途2. 线程共享性3. 内存分配和回收4. 生命周期5. 性能特点 1. 用途 1.堆:主要用于存储对象实例和数组。在Java中,所有通过new关键字创建的对象都会被分配到堆上。堆是一个大的内存池,用于存储所有的Java对象,包括实例变…...

智能的意义是降低世界的不确定性
世界充满着不确定性,而智能天生就追求一定的确定性,因为不确定性会危及智能的生存。智能本身是一种有序、相对确定的结构产生的,虽然也有一定的不确定性,而且这些不确定性有利于智能的进化,但是,相对而言&a…...

python实现指数平滑法进行时间序列预测
python实现指数平滑法进行时间序列预测 一、指数平滑法定义 1、指数平滑法是一种常用的时间序列预测算法,有一次、二次和三次平滑,通过加权系数来调整历史数据权重; 2、主要思想是:预测值是以前观测值的加权和,且对不同的数据给予不同的权数,新数据给予较大的权数,旧数…...