大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

用 Prettier 格式化 JavaScript 代码

  • 2018-02-28
  • 本文字数:1944 字

    阅读完需:约 6 分钟

假如你有过编程经验的话,你应该很清楚,很难做到既让代码简洁明了,又使不同的代码书写风格在一个项目中保持一致性。即便你花了很多时间达到了这个目的,其它的开发者也会提交他们的修改或者禁用某些标志以方便他们快速提交代码,从而让你的努力功亏一篑。

在格式化代码上浪费时间是一件很枯燥的事情,Prettier 的目标便是解决这个问题。它将用简单的设置来帮助你克服格式化带来的困扰。

Prettier 可以做什么?

Prettier 是一个很有特色的代码格式化工具,它可以使整个代码库的格式化过程自动化。因此在设置好 Prettier 之后,你不再需要与同事讨论代码格式化规则、分号、换行符等问题了。它会导入你所有代码,删除所有格式,并根据其样式规则重新格式化代码。

在 Prettier 环境下,所有的 javascript 代码都会转换为抽象语法树,然后被重新格式化。因此,它确保不会对编写的代码进行任何破坏更改。对你来说,所有的东西都会被神奇地格式化,这你并不用担心。

例如:

foo(reallyLongArg(), omgSoManyParameters(), IShouldRefactorThis(), isThereSeriouslyAnotherOne());会被被格式化为

复制代码
foo(
reallyLongArg(),
omgSoManyParameters(),
IShouldRefactorThis(),
isThereSeriouslyAnotherOne()
);

如果你想让体验一下,可以使用 playground 来试试。总结一下:

与ESLint 的差异

这是最常见的问题之一,简明的回答是ESLint 只是一个代码质量工具(确保没有未使用的变量、没有全局变量,等等)。而Prettier 只关心格式化文件(最大长度、混合标签和空格、引用样式等)。你可以将ESLint 和Prettier 结合起来使用,以获得双赢的组合。

Editorconfig 的作用

Prettier 1.9 版本之前会从 editorconfig 中读取配置值,推荐的配置选项包括:indent_style、indent_size/tab_width 和 max_line_length。

如何设置

如上所述,Prettier 的自动化程序会将整个代码库格式化。以下是你可以使用 Prettier 的场景:

  • 编辑器插件
  • CLI
  • Pre-commit hooks

在编辑器中使用

进入网站的交互页面并下载相应的插件,在你的IDE/ 编辑器中安装它。这应该是一个非常简单的过程。对于Visual Studio Code,你只需要从市场下载便可。之后,在用户设置中添加了一个首选项(“editor.formatOnSave”: true)。这样便可以起效了。我还根据我的需要设置了"prettier.singleQuote": true,其它的编辑器属性也可以在这里设置。

在项目中使用

你需要先安装Prettier 的CLI。我们将把它添加为dev 依赖项, (yarn add prettier --dev --exact or npm install --save-dev --save-exact prettier)。Prettier 推荐在项目中安装恰当的版本,因为Prettier 会在补丁发布时引入代码格式的变化。安装成功后,要针对某个特定文件运行的话,只需要运行命令yarn prettier --write index.js,这样便可在当前目录生成index.js 文件。

你可以根据需要配置Prettier 的其他选项,通常使用配置文件来做。也可以将这些添加到.prettierrc 文件中并放置在项目的根文件夹下。可用选项可以在网站上找到。

然后,你可以将这个命令添加到你的NPM 脚本中,并将src 文件夹作为一个glob 传递给它,而不是一个单独的文件。格式化脚本是这样的:prettier --write ‘./src/**/*.{ts,js,css,json}’。

如果你没有使用这种复杂的配置,也没用.prettierrc 文件,你也可以使用命令行参数指定选项配置。

然后你可以将其作为构建步骤的一部分进行调用。所有的改变也都会生效的。

在项目中,你可以更进一步将Prettier 代码整合为一个pre-commit hook。你需要安装husky 来配合lint-stage /pretty-quick 使用(如果你正在使用其他工具,比如ESLint,请使用lint-stage)。从NPM 安装这些包作为dev 依赖项之后,你可以将以下配置添加到package.json 文件中:

pretty-quick:

复制代码
"scripts": {
"precommit": "pretty-quick --staged”
}

lint-staged:

复制代码
"scripts": {
"precommit": "lint-staged",
"lint-staged": {
"*.{ts,js,css,json}": [
"prettier --write",
"git add"
]
}
}

要注意的是,当你将 prettier 作为一个 pre-commit hook 运行时,它会破坏你项目的状态。一个解决方案 ( gocarsno 在 Reddit 上建议的) 是在提交之前存储所有尚未载入的变更 (git stash -k)。

你可以更进一步在项目的构建步骤中添加另一个检查。Facebook 是这样做的,我是在一个员工会议演讲中知道这件事的。你可以在文件上的 CI/CD 服务器上运行 Prettier,如果 Prettier 的文件输出与签入的文件不同,那么服务器编译就会失败。你可以选择这样做,这取决于你依赖它的程度。

你还在等什么? 赶紧去配置使用 Prettier 吧!别再人工格式化项目代码了,让机器为你做这事。

分享这篇文章,我也是为了让更多的人发现 Prettier 的魅力。

英文原文链接 Using Prettier to format your JavaScript code

2018-02-28 17:06108429

评论

发布
暂无评论
发现更多内容

经常会采坑的javascript原型应试题

loveX001

JavaScript

校招前端二面常考react面试题(边面边更)

beifeng1996

React

前端一面常考react面试题

beifeng1996

React

假如问:你是怎样优化Vue项目的,该怎么回答

bb_xiaxia1998

Vue

海量数据同步首选 SeaTunnel Zeta 引擎正式发布!

Apache SeaTunnel

大数据 开源 apache 社区 Apache SeaTunnel 数据集成平台

2023我的前端面试小结

loveX001

JavaScript

基于ERNIELayout&pdfplumber-UIE的多方案学术论文信息抽取

汀丶人工智能

nlp 信息抽取 2022年终总结 2023新展望

web前端技术应该怎么规划学习?

小谷哥

2023我的前端面试小结

loveX001

JavaScript

前端培训机构如何学习开发技术

小谷哥

深圳大数据培训机构怎么选

小谷哥

Rancher RFO 正式 GA

openEuler

Linux 开源 Kubernetes 操作系统 rancher

React循环DOM时为什么需要添加key

beifeng1996

React

一种多维数据库的数据事务专利解读

元年技术洞察

数据中台 数字化转型 专利解析 多维数据库

用javascript分类刷leetcode13.单调栈(图文视频讲解)

js2030code

JavaScript LeetCode

AIGC最近很火,给大家推荐一个已经有1000位开发者使用的中文aigc开源模型,包括ai画图、ai聊天

AIGC布道者

人工智能 机器学习 AI AIGC AI绘画

ARM 算子性能优化上手指南

MegEngineBot

深度学习 开源 性能优化 MegEngine

功能上新|一键归因分析,快速洞察指标波动原因

Kyligence

指标中台 归因分析

如何通过C#/VB.NET将格式应用于 Word 中的字符

在下毛毛雨

C# .net word文档 字符格式

校招前端一面必会vue面试题指南

bb_xiaxia1998

Vue

前端高频vue面试题总结

bb_xiaxia1998

Vue

注意这八个容易损坏LED显示屏的情况

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

JavaScript刷LeetCode拿offer-栈相关题目

js2030code

JavaScript LeetCode

云时代,最好用的MySQL客户端工具推荐

NineData

MySQL 数据库 GUI

尚硅谷&腾讯云EMR实时数仓教程发布

小谷哥

2022年是最烂的一年吗?我的2022年终总结

Zhendong

总结 年终总结 2022年终总结

Koordinator v1.1发布:负载感知与干扰检测采集

阿里巴巴云原生

阿里云 云原生 Koordinator

如何在Java程序中合并和拆分Excel文档

Geek_249eec

Java Excel 工作表

深入理解JS作用域链与执行上下文

loveX001

JavaScript

OpenHarmony系统使用gdb调试init

OpenHarmony开发者

openha

React的useLayoutEffect和useEffect执行时机有什么不同

beifeng1996

React

用Prettier格式化JavaScript代码_JavaScript_Saransh Kataria_InfoQ精选文章