前端程式碼格式化社群提供了兩種比較常用的工具ESLint
和Prettier
,他們分別提供了對應的vscode的插件,二者在程式碼格式化方面有重疊的部分,規則不一致時會導致衝突。 vscode作為前端開發編輯器已經越來越普遍了,這需要開發者在vscode對他們的使用有一定的了解,掌握其中的原理對提升開發效率保證代碼質量方面會有很大的幫助,俗話中的工欲善其事必先利其器
、磨刀不誤砍柴工
都是類似的道理。 【推薦學習:vscode教學、程式設計影片】
#ESLint介紹
##ESLint的作用
ESLint的具體的用法以及原理等不在本文的介紹範圍,可自行查詢資料。
ESLint的作用應該大家都知道,它是檢查程式碼品質與風格的工具,配置一套規則,就能檢查出你程式碼中不符合規則的地方,部分問題支援自動修復;總結起來就兩個功能:
-
#程式碼品質檢查
可以發現程式碼中存在的可能錯誤,如使用未宣告變數、宣告而未使用的變數、修改const 變數、程式碼中使用debugger等等等
-
程式碼格式化
可以用來統一團隊的程式碼風格,例如加上不加分號、 使用tab
還是空格
、字串使用單引號 等等
如何在vscode中啟用ESLint
vscode使用ESLint進行程式碼檢查的條件:
- ##首先
,需要在vscode中安裝ESLint外掛程式並啟用,同時需要在
settings.jsonvscode
設定中開啟eslint的檢查。具體開啟在使用者層級的setting或專案層級的
中進行如下設定:
<pre class='brush:php;toolbar:false;'>{ "eslint.enable": true, // 开启eslint检查 }</pre>
- 其次
,需要在目前專案根目錄或全域安裝eslint,另外eslint的規則設定項目中的依賴也需要安裝。
若沒有安裝,則在vsconde的eslint控制台輸出如下錯誤:
- 最後
,需要在專案根目錄有設定檔.eslintrc.js或
.eslintrc.json
,或是根專案的package.json
中配置項目eslintConfig
中配置eslint的規則。若沒有任何設定文件,則eslint控制台會輸出如下錯誤:
#上面三個步驟缺一不可,都配置完後我們在
編輯中就能看到程式碼被eslint檢查的結果,js程式碼結果類似如下圖:
## eslint根據設定值的規則檢查兩個問題:紅色波浪線提示變數定義但未使用;黃色波浪線提示字串必須使用單引號。對於這些錯誤,vscode編輯器將eslint的檢查結果只顯示
其實,vscode
可以用eslint在檔案儲存時對部分的問題代碼進行自動修復,如上圖中的黃色波浪線部分,這需要在vscode配置eslint進行檔案儲存時自動格式化程式碼,具體是透過vscode的codeActionsOnSave.source.fixAll來設置,詳情如下:
{ "eslint.enable": true, // 开启eslint检查 "editor.codeActionsOnSave": { // 使用eslint来fix,包括格式化会自动fix和代码质量检查会给出错误提示 "source.fixAll.eslint": true } }
修改後再次儲存程式碼,部分不符合規則的程式碼自動格式化了,如下圖所示:
順便提示下:
#,表示使用所有提供的程式碼格式工具進行程式碼格式化,包括eslint,猛戳這裡
Prettier介绍
Prettier的作用
Prettier的作用是对代码进行格式化,并不关注代码质量潜在问题的检查。
Prettier
自身的规范倾向于团队的代码风格的规范或统一,例如每行最大长度,单引号还是双引号,等号左右空格,使用tab
还是空格等等。
除了js/ts外,它还支持对多种语言进行格式化,如vue、html、css、less、scss、json、jsx等等,是一个比较综合的代码格式化工具。
有了ESLint为啥还要用Prettier
介绍ESLint
时说到它也有代码格式化的功能,为啥还需要用Prettier
,引用这篇文章介绍了几个点:
-
ESLint
安装和配置比较麻烦,而且 lint 的速度并不快 -
Prettier
并不只针对 JavaScript,它可以格式化各种流行语言 -
Prettier
的配置选项没那么眼花缭乱,比ESLint
少很多,这在Prettier选项的哲学中说明精简的原因。
如何在vscode启用Prettier
在vscode
中启用Prettier
相对来说比较简单,并不需要在当前项目中安装Prettier
,只需:
在vscode中安装
Prettier
插件并启用,同时需要设置Prettier
为对应的代码默认格式化,或者将其设置为指定语言的代码格式化。
在用户级别的settings.json
中设置编辑器的默认代码格式化器:
{ "editor.defaultFormatter": "esbenp.prettier-vscode" }
或者为指定语音设置默认格式化器:
{ "[javascript]" { "editor.defaultFormatter": "esbenp.prettier-vscode" } }
上面虽然在vscode启用了Prettier,但是并没有在保存文件时进行代码格式化,要想实现自动保存代码进行代码格式化,需要:
- vscode开启代码保存时进行格式化
- 将
Prettier
作为默认的格式化工具,或者将Prettier
设置为指定语言的格式化器 - 是否设置需要
Prettier
的配置文件(.prettierrc
或.editorconfig
),有两种情况:若配置
"prettier.requireConfig": true
则要求根目录下有Prettier的配置文件,它会覆盖Prettier
扩展中的默认配置,如下图所示;否则保存时不会自动格式化。可以参考这里。
若配置
"prettier.requireConfig": false
则不要求根目录下有配置文件,若有的话也会被感知到并以配置文件的内容为准,如下图是没有配置文件时的提示信息:
上面三个步骤的在vscode中的配置体现如下:
{ "editor.formatOnSave": true, // 开启保存文件自动格式化代码 "editor.defaultFormatter": "esbenp.prettier-vscode", // 默认的代码格式化工具 "prettier.requireConfig": true // 需要Prettier的配置文件 }
再啰嗦一句:若设置需要配置文件,则必须要求根目录下有配置文件.prettierrc
或.editorconfig
中的一个或者两个同时存在,否则代码保存不会进行格式化。
可能你会对上面.editorconfig
文件作为Prettier
的配置文件感到疑惑,vscode的Prettier
插件中有关配置文件有这样的一段描述,如下图:
可以看出Prettier
插件获取配置文件有一个优先级:.prettierrc
> .editorconfig
> vscode默认配置
。
上面的前两者并不是说.prettierrc
和.editorconfig
同时存在时,后者的配置内容就被忽略,实际的表现:
.prettierrc
和.editorconfig
同时存在时,二者内容会进行合并,若配置项有冲突,这.prettierrc
的优先级更高。
ESLint与Prettier的冲突
冲突的原因
ESLint
和Prettier
都可以进行代码格式化方面,若二者同时出现下面的情况就会出现冲突:
- 重叠的格式化规则不一致,二者重叠的配置规则可以参考这里。
-
vscode同时开启二者进行格式化
{ "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode", "prettier.requireConfig": true, "eslint.enable": true, // eslint开启 "editor.codeActionsOnSave": { "source.fixAll.eslint": true // 代码保存使用eslint格式化 } }
满足上面的条件就会出现冲突,借鉴这篇文章的一幅图来展示:
例如当前的项目中ESLint
使用array-bracket-newline
配置数组项不需要换行,而Prettier
对其默认是按换行进行格式化,那么该规则就出现冲突,在文件保存时代其表现下图:
可以看出文件保存后代码格式化时会出现闪缩
的效果,这是因为二者都对代码进行了格式化,但是最终结果取决是谁最后一个进行格式化,从上图结果来看是Prettier
是最后执行,它的格式化的结果为最终输出结果,原因:
Prettier
的格式化耗时 >ESLint
的格式化耗时
最终以Prettier
的格式化结果来输出,但是这就与ESLint
的规则冲突,vscode编辑器就会将ESLint
结果给展示出来。
以和为贵:ESLint与Prettier和谐共处
鉴于Prettier
在代码格式化方面的优劣:
- 优势:可以对多种语言进行代码格式化,不仅仅是javascript
- 劣势:不具备代码质量检查的能力
所以最佳方案是整合二者,取各方之长。但上一节分析了两者同时存在时冲突的原因,那么在二者共存的情况下解决思路就比较明确了,有两种方案:
- 二者重叠的格式化规则保持一致
- 二者共同作用的语言使用其中一种进行格式化
下面分别对这两种方案进行介绍。
二者重叠的格式化规则保持一致
前面提到,二者之所以出现冲突的条件之一是同时在vscode中开启:
{ "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode", "prettier.requireConfig": true, "eslint.enable": true, "editor.codeActionsOnSave": { "source.fixAll.eslint": true } }
那么要搞清楚二者重叠的规则有哪些?重叠的规则有哪些是冲突的呢?好在社区有了答案可以参考这里,针对这种情况也给出了比较好的解决方案,具体来说:
在使用
ESLint
作为代码的格式化工具时,关闭可能与Prettier
有冲突的格式化规则,把Prettier当做一个linter规则。
主要是使用下面两个包:
eslint-config-prettier
会关闭ESLint
中有关代码格式化的配置,具体参考这里。eslint-plugin-prettier
把Prettier
配置成ESLint
的一个插件,让其当做一个linter规则来运行,可参考其官网。
注意:
eslint-plugin-prettier
需要项目安装Prettier
依赖
这样,只需在项目根目录下的.eslintrc.js
中配置如下:
{ "extends": ["plugin:prettier/recommended"] }
而plugin:prettier/recommended
帮我们做了如下事情:
{ "extends": ["prettier"], // 使用eslinst-config-prettier中的配置项 "plugins": ["prettier"], // 注册该prettier插件 "rules": { "prettier/prettier": "error", // 在eslint中运行prettier,并启用该插件提供的规则 "arrow-body-style": "off", // 关闭规则 "prefer-arrow-callback": "off" // 关闭规则 } }
这样配置后,ESLint
进行格式化时就会忽略跟Prettier
重叠的格式规则,这些交由Prettier
来进行格式化,这样二者可以愉快地一起分工协作了。
二者共同作用的语言使用其中一种进行格式化
方案一让二者协同工作的思路在ESLint
中关闭跟Prettier
可能存在冲突的规则,但是并没有避免二者同时格式化,也就是说实际上二者都参与了代码的格式化,只是输出内容一致而已。
可以从vscode的用户settings.json
配置文件可以看出:
"editor.formatOnSave": true
和"editor.defaultFormatter": "esbenp.prettier-vscode"
配置,告诉vscode在文件保存时都使用默认的Prettier
来对代码格式化。
而editor.codeActionsOnSave.source.fixAll.eslint: true
设置代码保存时使用ESLint
来进行格式化。
因为方案一本质上执行了两次代码格式化,所以我们可以有另一种思考:只使用二者中的一个进行代码格式化。
我们知道,ESLint
只对javascript、typescript以及javascrpitreact进行代码格式化,而对其他语言则无效,而Prettier
是可以的,所以针对二者共同作用的语言,我们可以关闭文件保存时自动格式化,也就是关闭Prettier
作为代码格式化工具,如下配置:
{ "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode", //针对共用的语言如JS、TS和JSX关闭文件保存自动格式化功能,通过eslint来做这件事 "[javascript]": { "editor.formatOnSave": false }, "[javascriptreact]": { "editor.formatOnSave": false }, "[typescript]": { "editor.formatOnSave": false }, "editor.codeActionsOnSave": { //告诉ESLint插件在保存时运行 "source.fixAll.eslint": true } }
这样,在js、ts或者jsx的文件保存时,不会调用Prettier
进行格式化,而是交由ESLint
来完成,除此之前的语言则是使用Prettier
来进行代码格式化。
补充:editor.formatOnSave vs editor.codeActionsOnSave
ESLint
和Prettier
存在冲突的一个原因,也在于vscode对文件保存时的配置操作有重合的地方,体现在formatOnSave
和codeActionsOnSave
上,二者都可以实现文件保存时格式代码,有重合的地方,对称有人在vscode社区提出是否可以删除一个:"source.fixAll""">Merge/remove "editor.formatOnSave" and "editor.codeActionsOnSave->"source.fixAll""。
vscode并没有采纳删除或者合并的建议,其提供这两个的配置,其出发点是不一样的,下面是社区的一段描述:
But the main difference between codeActionsOnSave
and formatOnSave
remains that:
- the latter (
formatOnSave
) only formats code, - while the former (
codeActionsOnSave
) can run one or several commands on the code, commands which might not be related to formatting.
The following editor.codeActionsOnSave
will always run Organize Imports
followed by Fix All
once organize imports finishes:
"editor.codeActionsOnSave": [ "source.organizeImports", "source.fixAll" ]
更多关于VSCode的相关知识,请访问:vscode基础教程!
以上是聊聊ESLint與Prettier在vscode怎麼進行程式碼自動格式化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

在VisualStudio中,代碼編譯、測試和部署的步驟如下:1.編譯:使用VisualStudio的編譯器選項將源代碼轉化為可執行文件,支持多種語言如C#、C 和Python。 2.測試:利用內置的MSTest和NUnit等框架進行單元測試,提高代碼質量和可靠性。 3.部署:通過Web部署、Azure部署等方式,將應用程序從開發環境轉移到生產環境,確保安全性和性能。

VisualStudioismicrosoft'sflagshipide,支持multipleProgrammingLanguagesandEnhancingCodingQodings.1)ItoffersFeaterSfeaturesLikeInkIntellisensensensensensensensensensensensensensensensensenseforcodePrediction,Multi-TabbedInterfaceForProproject Managements,andToolsfordEbugging,andToolsfordEbugging,Repactioning,andVersionControl.2

VisualStudio的免費版和付費版的主要區別在於功能的豐富程度和支持的服務。免費版(Community)適用於個人開發者和小型團隊,提供基本開發工具;付費版(Professional和Enterprise)則提供高級功能,如高級調試和團隊協作工具,適合大型項目和企業級開發。

VisualStudioCommunityEdition是一款免費的IDE,適合個人開發者、小型團隊和教育機構。 1)它提供代碼編輯、調試、測試和版本控制等功能。 2)基於Roslyn編譯器平台,支持多種編程語言並集成Git和TFVC。 3)高級功能包括單元測試,優化建議包括關閉不必要的擴展和使用輕量級編輯器。

VisualStudio是由微軟開發的集成開發環境(IDE),支持多種編程語言,包括C#,C ,Python等。 1.它提供了智能感知(IntelliSense)功能,幫助快速編寫代碼。 2.調試器允許設置斷點,逐步執行代碼,找出問題。 3.對於初學者,創建簡單的控制台應用程序是入門的好方法。 4.高級用法包括項目管理和依賴注入等設計模式的應用。 5.常見錯誤可以通過調試工具逐步解決。 6.性能優化和最佳實踐包括代碼優化、版本控制、代碼質量檢查和自動化測試。

VisualStudio適合大型項目和企業級應用開發,VSCode則適合快速開發和多語言支持。 1.VisualStudio提供全面的IDE環境,支持微軟技術棧。 2.VSCode是輕量級編輯器,強調靈活性和擴展性,跨平台支持。

是的,VisualStudio某些版本是免費的。具體來說,VisualStudioCommunityEdition對個人開發者、開源項目、學術研究和小型組織免費。然而,也有付費版本如VisualStudioProfessional和Enterprise,適用於大型團隊和企業,提供額外功能。

使用VisualStudio進行跨平台開發是可行的,通過支持.NETCore和Xamarin等框架,開發者可以編寫一次代碼並在多個操作系統上運行。 1)創建.NETCore項目並使用其跨平台能力,2)使用Xamarin進行移動應用開發,3)利用異步編程和代碼重用來優化性能,確保應用的高效運行和可維護性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境