尝试在Angular项目中引入ESLint和Prettier
现在在前端开发项目中,我认为 ESLint 和 Prettier 已成为不可或缺的存在。
即使在我目前参与的项目中(使用 Ionic 框架和 Angular),我们也引入了 ESLint 和 Prettier 来统一编码规则和格式化。
本文将简单总结引入 ESLint 和 Prettier 到项目中的好处,并概述在实际的 Angular 项目中如何引入它们。
安装ESLint和Prettier的好处
ESLint 和 Prettier 都是为开发者提供辅助的工具。
它们各自的作用如下所述:
◆ ESLint
▶︎ 可以检测语法错误和违规项。
◆ Prettier
▶︎ 可以将代码格式化为易读性好的样式。
关于代码格式化,仅使用ESLint已经可以进行代码格式化,但是Prettier会填补ESLint无法覆盖的部分。
ESLint是一个工具。
ESLint(拼音:Yī Sī )是一个用于 JavaScript 和 TypeScript 的静态验证工具。
它可以检查语法错误和编码规则的违反,并指出错误和违反位置,帮助开发人员进行辅助开发。
其引入的好处包括:
-
- プログラムを動かす前にコードの問題点を指摘してくれるので、効率的に品質の高い開発を行うことができる。
-
- いろいろなルールをカスタマイズして設定することができるので、プロジェクトに合わせた運用を行うことができる。
- 複数人で開発において、コーディングに一貫性を持たせることができる。
在Visual Studio Code(VS Code)中,可以通过安装ESLint插件来实现实时指出错误位置。
◆更漂亮
Prettier(发音:普莉提亚)是一个支持多种编程语言格式化的工具,包括JavaScript、TypeScript、HTML和CSS等。如果设置了编码规则,Prettier会根据规则执行格式化操作,使代码统一。在团队开发中,可以统一个人习惯,例如注释的写法、空格和缩进的使用方式,从而创建出整洁易读的源代码。
尝试引入ESLint和Prettier。
在整理了各自的角色之后,我想要实际创建一个Angular项目,并尝试引入这两个东西。
以下是我将在本次示例项目中使用的各组件的版本。
$ ng version
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 14.2.8
Node: 16.13.1
Package Manager: npm 8.19.2
OS: darwin x64
Angular: 14.2.9
... animations, common, compiler, compiler-cli, core, forms
... platform-browser, platform-browser-dynamic, router
Package Version
---------------------------------------------------------
@angular-devkit/architect 0.1402.8
@angular-devkit/build-angular 14.2.8
@angular-devkit/core 14.2.8
@angular-devkit/schematics 14.2.8
@angular/cli 14.2.8
@schematics/angular 14.2.8
rxjs 7.5.7
typescript 4.7.4
设置ESLint
添加ESLint
那么让我们实际在Angular项目中引入ESLint。
首先创建一个合适的Angular项目。
创建后进入项目文件夹,并执行以下命令。
$ ng lint
以下的命令是运行linter的命令,但由于尚未引入ESLint,因此linter不会被执行。
相反,可能会显示类似于以下消息:
“是否要添加ESLint?” 确认后,请输入Y执行。
$ ng lint
Cannot find "lint" target for the specified project.
You can add a package that implements these capabilities.
For example:
ESLint: ng add @angular-eslint/schematics
Would you like to add ESLint now? (Y/n) Y
确认是否要继续通过schematics进行安装,然后输入Y进行执行。
Would you like to add ESLint now? Yes
ℹ Using package manager: npm
✔ Found compatible package version: @angular-eslint/schematics@14.1.2.
✔ Package information loaded.
The package @angular-eslint/schematics@14.1.2 will be installed and executed.
Would you like to proceed? (Y/n) Y
如果显示类似以下消息,则表示已成功添加ESLint。
请注意:此回答假设您要将原句翻译成简体中文。如果您需要翻译成繁体中文,请告知。
✔ Packages successfully installed.
All @angular-eslint dependencies have been successfully installed ?
Please see https://github.com/angular-eslint/angular-eslint for how to add ESLint configuration to your project.
We detected that you have a single project in your workspace and no existing linter wired up, so we are configuring ESLint for you automatically.
Please see https://github.com/angular-eslint/angular-eslint for more information.
CREATE .eslintrc.json (984 bytes)
UPDATE package.json (1422 bytes)
UPDATE angular.json (3443 bytes)
✔ Packages installed successfully.
执行上述操作后,您可以在项目的根目录下检查,确认是否已添加名为「.eslintrc.json」的ESLint配置文件。
尝试运行ESLint检查。
因为已经添加了 ESLint,所以当您再次执行下面的命令时,将会执行 ESLint 的检查。
$ ng lint
All files pass linting.
由于显示「所有文件通过了检测」,所以检测似乎没有问题。
我还希望确认当检测有问题时会如何显示。
ESLint规则在配置文件「.eslintrc.json」中进行了设置,在刚安装完成后,应该是以下设置。
{
"root": true,
"ignorePatterns": [
"projects/**/*"
],
"overrides": [
{
"files": [
"*.ts"
],
"parserOptions": {
"project": [
"tsconfig.json"
],
"createDefaultProgram": true
},
"extends": [
"plugin:@angular-eslint/recommended",
"plugin:@angular-eslint/template/process-inline-templates"
],
"rules": {
"@angular-eslint/directive-selector": [
"error",
{
"type": "attribute",
"prefix": "app",
"style": "camelCase"
}
],
"@angular-eslint/component-selector": [
"error",
{
"type": "element",
"prefix": "app",
"style": "kebab-case"
}
]
}
},
{
"files": [
"*.html"
],
"extends": [
"plugin:@angular-eslint/template/recommended"
],
"rules": {}
}
]
}
在上述的内容中,规则属性中所列出的内容是ESLint检查的规则。例如,对于component-selector规则,设置”prefix”: “app”,这意味着如果将组件选择器的前缀设置为非app的名称,将会被提示为Lint错误。
$ ng lint
[プロジェクトのパス]/src/app/app.component.ts
4:13 error The selector should start with one of these prefixes: "app" (https://angular.io/guide/styleguide#style-02-07) @angular-eslint/component-selector
✖ 1 problem (1 error, 0 warnings)
Lint errors found in the listed files.
看起来已经进行了仔细的检查了!
在VS Code中安装ESLint插件,并实时检查是否有违反的情况。
设置Prettier
接下来,我想设置Prettier。
添加Prettier
为了与Prettier和ESLint一起使用,您可以使用以下命令来安装多个软件包。
npm install --save-dev prettier eslint-config-prettier @typescript-eslint/eslint-plugin
-
- prettier: Prettierの本体。
-
- eslint-config-prettier:Prettierと競合するESLintのルールを無効化する。
- @typescript-eslint/eslint-plugin:ESLintでTypeScriptのルールを適用するためのプラグイン。
在ESLint的配置文件中添加Prettier的信息。
为了能够同时使用ESLint和Prettier,将ESLint配置文件“.eslintrc.json”修改如下。
{
"root": true,
"ignorePatterns": [
"projects/**/*"
],
"overrides": [
・・・ 省略 ・・・
"extends": [
"plugin:@angular-eslint/recommended",
"plugin:@angular-eslint/template/process-inline-templates",
"prettier" // これを追加
],
・・・ 省略 ・・・
创建Prettier的配置文件
创建一个名为 “.prettierrc.json” 的 Prettier 配置文件,并在其中录入规则设置。
{
"printWidth": 120, // 折り返す行の長さ
"singleQuote": true, // ダブルクォートの代わりにシングルクォートを使用
}
执行格式化器
我打算在进行ESLint检查之后运行格式化程序,所以我要在”package.json”文件中设置命令。
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"watch": "ng build --watch --configuration development",
"test": "ng test",
"lint": "ng lint",
"lint-fix": "eslint --cache --fix src/ && prettier --write src/"// ここを追加
},
在设置了 scripts 之后,执行以下命令,就可以在 ESLint 检查之后执行代码格式化工具!
npm run lint-fix
总结
本文简要介绍了ESLint和Prettier,并总结了在Angular项目中引入它们的步骤。
由于细节规则的设置仍未完全整理清楚,我希望能够在以后的某个时间里再进行整理。