vue3项目如何配置ESLint和prettier

vue3项目如何配置ESLint和prettier

配置eslint

安装eslint

npm add eslint -D

安装完成后进行项目初始化

npm init @eslint/config

然后根据提示选择对应的选项,作者个人选择如下:

? How would you like to use ESLint? ...
To check syntax only 
To check syntax and find problems
> To check syntax, find problems, and enforce code style
  • To check syntax only: 仅检查语法
    这个选项只会让 ESLint 检查您的代码是否符合语法规则,不会执行其他的代码质量检查或风格强制。

  • To check syntax and find problems: 检查语法并发现问题
    选择这个选项后,ESLint 将检查您的代码语法,并查找可能存在的问题,如未定义的变量、未使用的变量等。

  • To check syntax, find problems, and enforce code style: 检查语法、发现问题并强制代码风格。这是最全面的选项,选择后,ESLint 将不仅检查语法和问题,还会根据您的配置强制执行代码风格规则,确保代码在整体风格上保持一致。

通常,如果希望在项目中使用 ESLint 来保证代码的风格一致性和质量,那么直接选择第三个就好。

接下来会询问您的项目使用什么类型的模块(Module)系统:

? What type of modules does your project use? ...
> JavaScript modules (import/export)
CommonJS (require/exports)
None of these
  • JavaScript modules (import/export): JavaScript 模块(使用 importexport 语法)
    如果项目使用了 JavaScript 的模块系统,即使用了 ES6 的 importexport 语法来组织和导入导出代码文件,那么选择这个选项。

  • CommonJS (require/exports): CommonJS 模块(使用 requiremodule.exports 语法)
    如果项目使用了 CommonJS 的模块系统,即使用了 requiremodule.exports 语法来组织和导入导出代码文件,那么选择这个选项。

  • None of these: 无
    如果项目既不使用 JavaScript 的模块系统,也不使用 CommonJS 的模块系统,可以选择这个选项。

由于我是写Vue项目,这里我就选择第一个。

接下来询问在哪个框架中使用:

? Which framework does your project use? ...
React
> Vue.js
None of these

这里我选择了Vue.js,大家按需选择就好。

接下来会询问你是否使用ts和代码在哪里运行:

√ Does your project use TypeScript? · No / **Yes**
√ Where does your code run? · browser, node
  • Does your project use TypeScript?
    这个选项用来询问您的项目是否使用 TypeScriptTypeScript 是一个 JavaScript 的超集,它添加了静态类型检查和其他特性。您可以选择以下选项之一:

No: 如果项目不使用 TypeScript,选择这个选项。
Yes: 如果项目使用 TypeScript,选择这个选项。
如果项目使用 TypeScript,ESLint 会结合 @typescript-eslint 插件来提供 TypeScript 相关的检查和规则。

  • Where does your code run?
    这个选项用来询问您的代码将在什么环境中运行。您可以选择多个环境,如浏览器、Node.js 等。选择适合您项目的环境类型。例如:

browser: 如果您的代码将在浏览器环境中运行。
node: 如果您的代码将在 Node.js 环境中运行。
根据您的选择,ESLint 将会根据不同的环境提供相应的规则和检查。

这里还是看项目类型按需选择。

接下来问你希望如何定义项目的样式:

√ How would you like to define a style for your project? …
  Use a popular style guide
❯ Answer questions about your style
  ## next
√ How would you like to define a style for your project? · prompt
  • Use a popular style guide: 使用一个流行的代码风格指南
    如果选择了这个选项,就可以从一些已知的流行代码风格指南中进行选择,例如 Airbnb、Google、Standard 等。这将会自动为应用选定的代码风格指南,以及相关的 ESLint 规则和配置。

  • Answer questions about your style: 如果选择了这个选项,将会被引导回答一系列问题,用于自定义代码风格配置。这将根据自己的偏好和项目需求,创建一个项目的 ESLint 配置。

  • next: 继续
    如果选择了这个选项,您将会跳过当前步骤,继续下一步的配置。

  • How would you like to define a style for your project? · prompt
    如果选择了这个选项,您将会使用交互式提示来自定义代码风格。这将会引导你回答一些问题,以便为你的项目生成适合的 ESLint 配置。

这里我们可以选择第二个。

然后询问你想用什么格式的配置文件:

? What format do you want your config file to be in? ...
> JavaScript
  YAML
  JSON

这里我就选JavaScript

询问缩进风格:

? What style of indentation do you use? ...
> Tabs
  Spaces
  • Tabs: 使用制表符进行缩进
    如果你选择了这个选项,你的代码中的缩进将使用制表符进行,每一个级别的缩进都是一个制表符。

  • Spaces: 使用空格进行缩进
    如果你选择了这个选项,你的代码中的缩进将使用空格进行,每一个级别的缩进通常是 2 个或 4个空格,这取决于你的偏好和项目规范。

由于我喜欢tab缩进,所以我就选择第一个。

字符串使用双引号还是单引号:

? What quotes do you use for strings? ...
  Double
> Single
  • Double: 使用双引号表示字符串
    如果你选择了这个选项,你的代码中的字符串将使用双引号包裹,例如 "Hello, World!"。

  • Single: 使用单引号表示字符串
    如果你选择了这个选项,你的代码中的字符串将使用单引号包裹,例如 'Hello, World!'。

这里看个人or团队习惯,这里我就选择了单引号。

用哪种结束符:

? What line endings do you use? ...
> Unix
  Windows
  • Unix: 使用 Unix 风格的换行符
    如果你选择了这个选项,你的代码中的换行符将采用 Unix 风格,即 LF(换行Line Feed)。

  • Windows: 使用 Windows 风格的换行符
    如果你选择了这个选项,你的代码中的换行符将采用 Windows 风格,即 CRLF(回车换行 Carriage Return Line Feed)。

这里我选择Unix

是否使用分号:

? Do you require semicolons? » No / Yes

我个人不喜欢使用分号,所以选择No

然后会问你是否安装依赖:

@typescript-eslint/eslint-plugin@latest eslint-plugin-vue@latest @typescript-eslint/parser@latest
? Would you like to install them now? » No / Yes   

这里我们选择Yes,然后会询问你用什么包管理器去安装依赖:

? Which package manager do you want to use? ...
  npm
  yarn
> pnpm 

这里我选择npm

安装完成后我们项目的根目录会生成.eslintrc.js文件:

module.exports = {
    env: {
        browser: true,
        es2021: true
    },
    extends: ['eslint:recommended', 'plugin:vue/vue3-essential'],
    overrides: [
        {
            env: {
                node: true
            },
            files: ['.eslintrc.{js,cjs}'],
            parserOptions: {
                sourceType: 'script'
            }
        }
    ],
    parserOptions: {
        ecmaVersion: 'latest',
        sourceType: 'module'
    },
    plugins: ['vue'],
    rules: {
        indent: ['error', 'tab'],
        'linebreak-style': ['error', 'unix'],
        quotes: ['error', 'single'],
        semi: ['error', 'never']
    }
}

有时候我们希望它可以忽略一些检查,所以我们可以在根目录建立一个.eslintignore文件用来忽略一些检查,这里根据个人需求进行配置即可,我的配置如下:

*.sh
node_modules
*.md
*.woff
*.ttf
.vscode
.idea
dist
/public
/docs
.husky
.local
/bin
Dockerfile

配置Prettier

尽管 ESLintPrettier 都具备代码质量和维护性方面的功能,但它们的焦点不同。通过同时使用 ESLintPrettier,可以获得代码质量的全面检查,同时确保代码风格的一致性。通常的做法是将 ESLint 用于检测代码问题和逻辑错误,而 Prettier 则用于自动格式化代码,以便代码在不同人之间保持一致的外观。这样可以最大限度地提高代码质量和可维护性。

安装:

npm add prettier -D

安装完成后,在项目根目录新建.prettierrc.js文件,这里简单列一下常用的,剩下的可以到官网查看

module.exports = {
    printWidth: 100, //一行的字符数
    tabWidth: 4, // 一个tab代表几个空格数
    useTabs: true, //是否使用tab进行缩进
    singleQuote: true, //字符串是否使用单引号
    semi: false, // 行尾是否使用分号,默认为true
    trailingComma: "none", // 是否使用尾逗号
    htmlWhitespaceSensitivity: "strict", // HTML空白敏感度
    bracketSpacing: true, // 对象大括号直接是否有空格,默认为 true,效果:{ a: 1 }
    proseWrap: "never", // 换行设置
}

同时也可以在根目录下建立忽略文件.prettierignore

/dist/*
.local
.output.js
/node_modules/**
**/*.svg
**/*.sh
/public/*

eslint与Prettier相结合

我们可以使用eslint-config-prettiereslint-plugin-prettier来结合eslint与Prettier。

eslint-config-prettier用来覆盖 ESLint 本身的规则配置,

eslint-plugin-prettier则是用于让 Prettier 来接管eslint --fix即修复代码的能力。

安装:

npm i eslint-config-prettier eslint-plugin-prettier -D

最终代码如下:

module.exports = {
    env: {
        browser: true,
        es2021: true
    },
    extends: ['eslint:recommended', 'plugin:vue/vue3-essential', 'plugin:prettier/recommended'],
    overrides: [
        {
            env: {
                node: true
            },
            files: ['.eslintrc.{js,cjs}'],
            parserOptions: {
                sourceType: 'script'
            }
        }
    ],
    // 参考vue官方推荐,替换默认parser
    parser: 'vue-eslint-parser',
    parserOptions: {
        ecmaVersion: 'latest',
        sourceType: 'module'
    },
    plugins: ['vue'],
    rules: {
        indent: ['error', 'tab'],
        'linebreak-style': ['error', 'unix'],
        quotes: ['error', 'single'],
        semi: ['error', 'never']
    }
}

然后在项目的package.json中配置一条命令:

{
    "scripts": {
        "lint:script": "eslint --ext .js,.jsx --fix --quiet ./",
    }
}

该命令于检查和修复代码该命令的作用是在指定的文件扩展名(.js、.jsx)下,运行 ESLint 来检查并尝试修复当前目录及其子目录中的代码问题。命令的目标是自动化代码质量检查和格式修复的过程,以确保代码符合规范和最佳实践。

但还有一个问题就是,目前只会检测.js.jsx文件,并不会检测.vue文件,这里我们还需要借助一些插件来实现。

支持.vue文件

安装下面插件:

npm install eslint-plugin-vue vue-eslint-parser --save-dev

配置.eslintrc.js,在extends中添加这两个插件,最终配置如下:

module.exports = {
    env: {
        browser: true,
        es2021: true,
        node: true
    },
    extends: [
        'eslint:recommended',
        'plugin:vue/vue3-essential',
        //新增插件
        'plugin:prettier/recommended',
        'plugin:vue/recommended'
    ],
    overrides: [
        {
            env: {
                node: true
            },
            files: ['.eslintrc.{js,cjs}'],
            parserOptions: {
                sourceType: 'script'
            }
        },
        {
            files: ['*.vue'],
            rules: {
                'no-undef': 'off',
                'vue/no-setup-props-destructure': 'off',
                'vue/multi-word-component-names': 'off',
                'vue/no-mutating-props': 'off',
                'no-unused-vars': 0,
                'vue/valid-attribute-name': 'off'
            }
        }
    ],
    // 参考vue官方推荐,替换默认parser
    parser: 'vue-eslint-parser',
    parserOptions: {
        ecmaVersion: 'latest',
        sourceType: 'module'
    },
    plugins: ['vue'],
    rules: {
        'prettier/prettier': 'error',
        indent: ['error', 'tab'],
        'linebreak-style': ['error', 'unix'],
        quotes: ['error', 'single'],
        semi: ['error', 'never'],
        'no-console': 'off',
        'no-debugger': 'off'
    }
}

然后修改命令为:

"scripts": {
    "lint:script": "eslint --ext .js,.jsx,.vue --fix --quiet ./"
},

运行时实时验证

如果使用vscode编辑器,可以下载ESLintPrettier-Code formatter进行验证,该插件会检测项目根目录是否存在相关配置文件,如果有相关配置文件则会根据配置文件在保存的时候进行检测,如果不用vscode开发也没关系,可以借助一些插件实现运行时代码保存时候根据规则进行验证。

npm i vite-plugin-prettier 

vite.config.js文件中引入插件文件中引入插件:

import VitePrettier from 'vite-plugin-prettier'
export default defineConfig({
  plugins: [
    VitePrettier({
      singleQuote: true,// 字符串是否使用单引号
      //...更多规则
    })
  ],
})

配置后重启项目,只要项目在运行中,保存代码就会通过prettier进行代码格式化处理。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容