【Prettier】代码格式化工具Prettier的使用和配置介绍

news2024/11/30 20:37:56

前言

前段时间,因为项目的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制表符两个空格。

 //  制表符空格数,默认2
  tabWidth: 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 风格的行结束符:

  1. 确保 Prettier 的 endOfLine 选项设置为 lf(这是自 2.0.0 版起的默认值)
  2. 配置运行 Prettier 的预提交钩子
  3. 使用 --check 标志配置 Prettier 在 CI 管道中运行。如果使用 Travis CI,请在 .travis.yml 中将 autocrlf 选项设置为输入。
  4. 在 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": []

结语

结束了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2059531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从ESG尽职调查、ESG立法与ESG诉讼谈ESG营销(01)

哈佛大学2024年中回顾全球ESG发展近况 作者&#xff1a;哈佛大学 编辑&#xff1a;数字化营销工兵 2024年上半年&#xff0c;环境、社会和治理&#xff08;ESG&#xff09;问题以及对方法的不同意见继续成为全球头条新闻。今年年初&#xff0c;公司及其利益相关者在ESG的支持…

AppenTalk | 不止于赛场,巴黎奥运会上的中国AI科技

当地时间8月11日&#xff0c;第33届夏季奥林匹克运动会在巴黎法兰西体育场落下帷幕。本届奥运会&#xff0c;中国体育代表团收获令人振奋的40金27银24铜总计91枚奖牌&#xff0c;其中金牌数更是创下了境外参加奥运会的最佳成绩。 在中国健儿闪耀奥运赛场时&#xff0c;中国AI科…

Transformer系列-4丨DETR模型和代码解析

1 前言 往期的文章中&#xff0c;笔者从网络结构和代码实现角度较为深入地和大家解析了Transformer模型、Vision Transformer模型&#xff08;ViT&#xff09;以及BERT模型&#xff0c;其具体的链接如下&#xff1a; 基础Transformer解析 ViT模型与代码解析 BERT模型与代码解…

嵌入式AI快速入门课程-K510篇 (第七篇 系统BSP开发)

第七篇 系统BSP开发 文章目录 第七篇 系统BSP开发1. 嵌入式Linux系统介绍嵌入式Linux系统组成产品形态嵌入式芯片启动流程Linux系统Linux系统框架嵌入式编译环境 2.嵌入式Linux开发准备手册文档开发工具配套硬件工程源码 3.嵌入式Linux开发组成概述编译工具链什么是工具链什么是…

[Linux#43][线程] 死锁 | 同步 | 基于 BlockingQueue 的生产者消费者模型

目录 1. 死锁 解决死锁问题 2. 同步 2.1 条件变量函数 cond 2.2 条件变量的使用&#xff1a; 3.CP 问题--理论 4. 基于 BlockingQueue 的生产者消费者模型 1. 基本概念 2.BlockQueue.hpp 基本设置&#xff1a; 生产关系控制&#xff1a; 消费关系的控制 ⭕思考点 …

公开整理-全国各省AI算力数据集(2000-2024年)

数据来源&#xff1a;本数据来源于&#xff0c;根据显卡HS编码筛选统计后获得时间跨度&#xff1a;2000-2024年数据范围&#xff1a;省级层面数据指标&#xff1a; 由于未发布2015至2016年的数据&#xff0c;因此该年份数据存在缺失。下表仅展示了部分指标及数据 年份 省份…

Mac apache 配置

命令 sudo apachectl -v //查看apache 版本 sudo apachectl -k start //启动apache sudo apachectl -k stop //停止apache sudo apachectl -k restart //重启apache配置 apache 的配置在 /etc/apache2/httpd.conf 默认情况下httpd.conf 为锁定状态&#xff0c;无法编辑 使用…

SAP B1 三大基本表单标准功能介绍-业务伙伴主数据(三)

背景 在 SAP B1 中&#xff0c;科目表、业务伙伴主数据、物料主数据被称为三大基本表单&#xff0c;其中的标准功能是实施项目的基础。本系列文章将逐一介绍三大基本表单各个字段的含义、须填内容、功能等内容。 附上 SAP B1 10.0 的帮助文档&#xff1a;SAP Business One 10…

单片机外部中断+定时器实现红外遥控NEC协议解码

单片机外部中断定时器实现红外遥控NEC协议解码 概述解码过程参考代码 概述 红外(Infrared&#xff0c;IR)遥控&#xff0c;是一种通过调制红外光实现的无线遥控器&#xff0c;常用于家电设备&#xff1a;电视机、机顶盒等等。NEC协议采用PPM(Pulse Position Modulation&#x…

敏感词替换为星号

编写一个函数&#xff0c;接收一个字符串参数&#xff0c;将其中 的敏感词替换为星号&#xff0c;并返回替换后的结果。 def getReplace(s):wordList["阿里巴巴","苹果","亚马逊","京东","字节","脸书"]for word …

月圆之夜梦儿时 贡秋竹唱响游子心声

自今年年初贡秋竹的首支单曲《逐梦》发布以来&#xff0c;其人气和传唱度便一直屡创新高&#xff0c;口碑上佳表现良好&#xff0c;网友们纷纷隔空喊话贡秋竹再发新作。时至今日&#xff0c;久经打磨的贡秋竹全新力作《低头思故乡》在千呼万唤中终于震撼首发&#xff01; 贡秋竹…

500以内开放式耳机哪款好?五款高性价比开放式耳机推荐

现在很多人会利用休闲时间进行锻炼&#xff0c;增强体质&#xff0c;在锻炼之前很多人会先入手一些运动设备&#xff0c;像慢跑鞋&#xff0c;还有臂环&#xff0c;运动手表等~当然运动耳机肯定也不能少&#xff0c;边运动边听音乐真的是一大享受&#xff01;但是哪种耳机比较适…

从零到一,全面掌握Apache DolphinScheduler发版流程,实战派经验分享!

引言 Apache DolphinScheduler的发版流程对于确保软件质量和社区协作至关重要&#xff0c;社区Committer王兴杰为我们详细介绍了Apache DolphinScheduler的发版流程&#xff0c;包括环境准备、流程文档、基础工具准备、依赖包确认等关键步骤&#xff0c;并指出了发版流程中可能…

一机两用的“多面手”既防勒索病毒又能做到数据防泄密!

随着数字化转型的加速&#xff0c;企业对互联网的依赖日益加深&#xff0c;网络安全风险也随之增加。勒索病毒作为网络安全领域的一大威胁&#xff0c;不仅加密重要文件&#xff0c;还可能泄露敏感信息&#xff0c;给企业带来巨大损失。SPN沙盒产品&#xff0c;以其独特的隔离技…

【python报错解决】ImportError: DLL load failed while importing win32gui: 找不到指定的程序

在 Python 中安装 pywin32 库 pip install pywin32安装完成后找到自己的 Python 根目录&#xff0c;在该目录下打开命令行。 在命令行中输入&#xff1a; python.exe Scripts/pywin32_postinstall.py -install执行后显示以下信息&#xff0c;即问题解决。 Parsed argumen…

KP8530X系列KP85302SGA 650V耐压 集成自举二极管的半桥栅极驱动器 专用于驱动功率MOSFET或IGBT

KP8530X系列KP85302SGA是一款 650V 耐压&#xff0c;集成自举二极管的半桥栅极驱动器&#xff0c;具有 0.3A 拉电流和 0.6A 灌电流能力&#xff0c;专用于驱动功率 MOSFETs 或 IGBTs。采用高压器件工艺技术&#xff0c;具有良好的电流输出及出色的抗瞬态干扰能力。在输入逻辑引…

React+Vis.js(05):vis.js的节点的点击事件

文章目录 需求实现思路抽屉实现完整代码需求 双击节点,弹出右侧的“抽屉”,显示节点的详细信息 实现思路 vis.network提供了一个doubleClick事件,代码如下: network.on(doubleClick, function (properties) {// console.log(nodes);let id = properties

el-date-picker根据某个时间动态规定可选的的时间范围

el-date-picker组件根据某一个时间段来动态规定当前时间选择的日期时间范围 例如&#xff1a;开始时间为2024-8-19&#xff0c;规定可循范围为30天的话&#xff0c;可选范围是2024-8-19至2024-9-19号之间 html <el-date-picker class"date" type"date"…

【GIS开发学员故事】地信本科前后跨过六个行业,勇气是人生的第七件装备

“出过外业、送过外卖、搞过环境设计......” 今天&#xff0c;我们就来看看X同学的就业故事&#xff1a; 自我介绍 我毕业于21年&#xff0c;大学是地理信息科学专业&#xff0c;考过一次研&#xff0c;但是没有考上。去年来的新中地学习GIS开发&#xff0c;目前是在广东的…

人机环境系统智能中有三种神经网络相互作用

在人机环境生态系统智能中&#xff0c;人、机器和环境之间的相互作用确实涉及到三种神经网络的协作&#xff0c;分别是人的神经网络、机器的神经网络和环境的神经网络。 1. 人的神经网络 人的神经网络指的是人类大脑及其神经系统的复杂结构&#xff0c;通过神经元之间的连接来处…