Vue3+Vite项目配置Eslint+Prettier+Husky+Lint-Staged+Commitlint

2023-11-14

Eslint 配置

ESLint 是一个插件化并且可配置的 JavaScript 语法规则和代码风格的检查工具。 ESLint 能够帮你轻松写出高质量的 JavaScript 代码。

1.建议 vscode 安装 Eslint 的插件,这个插件的作用是不符合 Eslint 规范的代码在编辑器中会有波浪线以及提示。
2.安装依赖包,eslinteslint-plugin-vue 3.在根目录新建.eslintrc.js文件,里面的 eslint 的配置。
3.在 vscode 的用户配置文件中需要加入以下配置,来控制保存时候就可以修复代码:

{
  /* eslint配置 */
  "eslint.enable": true, // 是否开启eslint
  "eslint.alwaysShowStatus": true, // 底部eslint状态栏显示
  // code代码保存时,自动eslint修复
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  },
  "eslint.validate": ["javascript", "javascriptreact", "html", "vue", "vue-html"]
}

Prettier 配置

Prettier 是一个强大的格式化代码工具,支持大量的编程语言,统一了风格,推荐使用。
1.需要在 vscode 中安装插件,搜索出来安装即可。
2.需要在根目录新建 .prettierrc文件,在里面配置的才会生效,如果想统一在 vscode 用户配置中生效,需要在用户配置中加一行"prettier.useEditorConfig": false,,才会使全局中配置的生效,不然默认是需要新建文件才起作用。

{
  "tabWidth": 2,
  "useTabs": false,
  "printWidth": 80, // vscode默认80字符
  "eslintIntegration": true,
  "endOfLine": "auto", // 指定文件的结尾换行符
  "htmlWhitespaceSensitivity": "ignore" // 解决格式化时标签属性等太多导致结束标签错乱不对齐的问题
}

Eslint 和 Prettier 结合

我们需要两者结合起来,用 eslint 负责修复代码,prettier 负责格式化代码,但是直接两者结合直接是会冲突,导致代码不能正常修复和格式化,需要引入另外两个包来用,eslint-config-prettier,eslint-plugin-prettier
需要在以上基础上,在根目录新建.eslintrc.js文件,把 eslint 和 prettier 都配置进去生效。

/**
 * eslint配置
 */
module.exports = {
  root: true,
  env: {
    browser: true,
    node: true,
    es6: true,
  },
  parser: "vue-eslint-parser",
  parserOptions: {
    ecmaVersion: 2022, // 使用的 ECMAScript  版本
    sourceType: "module",
    ecmaFeatures: {
      jsx: true, // 开启jsx模板支持
    },
  },
  extends: ["eslint:recommended", "plugin:vue/vue3-recommended", "plugin:prettier/recommended"],
  rules: {
    /* 常规规则 */
    "spaced-comment": [2, "always"], // 注释后面必须写两个空格
    "no-unused-vars": "off", // 忽略未使用的变量
    "no-unreachable": "off", // 忽略return后未执行代码的提示
    "no-empty": "off", // 忽略代码必须返回结果的限制
    "no-prototype-builtins": "off", // 忽略不能直接使用Object原型的一些方法

    /* vue规则 */
    "vue/no-unused-components": "off", // vue忽略未使用组件提示
    "vue/no-unused-vars": "off", // vue忽略未使用的变量
    "vue/return-in-computed-property": "off", // vue忽略函数必须返回值
    "vue/multi-word-component-names": "off", // vue忽略文件名建议的短横单词分割
    "vue/no-reserved-component-names": "off", // vue忽略不能使用html标签当组件名的规则
    "vue/comment-directive": "off",
  },
};

至此已经可以实现在开发项目时按保存就能修复代码和格式化的功能,可以简单满足一个项目的规范。如果想严格控制 eslint 并错误输出,以及控制提交 git 的规范,就需要更多的配置,请往下继续看。

Vite 中输出 eslint 错误信息

1.先安装vite-plugin-eslint的包,在 vite.config.js 中的 plugins 中配置,在

import vitePluginEslint from "vite-plugin-eslint";

export default defineConfig(({ command, mode }) => {
  const env = loadEnv(mode, CWD);
    /* 插件配置 */
    plugins: [
      // eslint校验,在development开发模式下起作用
      mode === "development" &&
        vitePluginEslint({
          // lintOnStart: true, // 启动时候是否就执行eslint校验,如果开启的话有eslint的报错则服务是会启动失败
        }),
    ],
});

Husky 配置

husky 能够实现 git hooks ,就是在我们使用 git 命令的时候,执行一些操作等,如文中我们就是在 git commit 时执行 eslint 和 commitlint 规范检测。

1.安装依赖

pnpm i husky -D

2.在 package.json 中的 scripts 脚本里新加一行

{
  "scripts": {
    "prepare": "husky install"
  }
}

3.使用pnpm prepare执行脚本,会在根目录下有一个 .husky的目录,运行npx husky add .husky/pre-commit "pnpm run eslint",这时会在这个.husky/pre-commit中有一条命令pnpm run eslint,当 git commit 时候,会先运行 eslint 的脚本校验整个项目,通过后才可以提交成功。

4.如果你还想用 lint-stagedcommitlint ,请继续往下看配置。

Lint-Staged 配置

上面钩子有了后,提交会 eslint 项目所有的,这样项目大的话比较慢,需要配合 lint-staged 来提交时只校验暂存区中的文件,这样每次提交会大大节省时间。 1.安装 lint-staged

pnpm i lint-staged

2.在 package.json 中新增配置

{
  "lint-staged": {
    "src/**/*.{js,ts,tsx,jsx,vue}": ["pnpm lint:fix", "prettier --write"],
    "src/**/*.{css,less,scss}": ["prettier --write"],
    "src/**/*.{md,json}": ["prettier --write"]
  }
}

当然也可以单独抽离一个文件.lintstagedrc.js,配置是

/**
 * lint-staged 校验暂存区的文件
 */
module.exports = {
  "src/**/*.{js,ts,tsx,jsx,vue}": ["pnpm lint:fix", "prettier --write"],
  "src/**/*.{css,less,scss}": ["prettier --write"],
  "src/**/*.{md,json}": ["prettier --write"],
};

修改项目根目录.husky/pre-commit这个文件,把之前的pnpm run lint命令注释掉,新加一条命令 npx --no-install lint-staged

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

# pnpm run lint # 这条注释掉不用了,因为我们要用lint-staged,只检测暂存区的代码
npx --no-install lint-staged

配置到这里仅控制提交已经结束,我们可以找个 vue 文件试验一下,先 git add .,再执行 git commit -m '测试',会发现控制台会一直输出校验的内容,在lint-staged中配置的命令会帮我们自动修复代码,如果自动修复失败,会在控制台报错提示。

Commitlint 配置

commitlint 是控制代码提交规范的一个插件包,因为每个人的提交信息不一样,比如修复 bug 和新加功能等不同类别的 commit 信息都可能会比较乱,没有一个机制很难保证规范化,现在可以利用 git 的 hook 机制可以实现控制提交信息。

安装依赖包 commitlint/config-conventionalcommitlint/cli

# 安装这两个依赖包
pnpm i @commitlint/config-conventional @commitlint/cli -S

在项目根目录的控制台运行命令 npx husky add .husky/commit-msg 'npx --no-install commitlint --edit ${1}',这时会自动在根目录 .husky 下新增文件 commit-msg,其中内容如下:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npx --no-install commitlint --edit $1

然后在项目根目录下新增 .commitlintrc.js 配置文件

module.exports = {
  // 继承的规则
  extends: ["@commitlint/config-conventional"],
  // 定义规则类型
  rules: {
    // type 类型定义,表示 git 提交的 type 必须在以下类型范围内
    "type-enum": [
      2,
      "always",
      [
        "feat", // 增加新功能
        "fix", // 修复 bug
        "add", // 增加代码逻辑
        "del", // 删除功能
        "update", // 更新功能
        "docs", // 文档相关的改动
        "style", // 不影响代码逻辑的改动,例如修改空格,缩进等
        "build", // 构造工具或者相关依赖的改动
        "refactor", //  代码重构
        "revert", // 撤销,版本回退
        "test", // 添加或修改测试
        "perf", // 提高性能的改动
        "chore", // 修改 src 或者 test 的其余修改,例如构建过程或辅助工具的变动
        "ci", // CI 配置,脚本文件等改动
      ],
    ],
    // subject 大小写不做校验
    "subject-case": [0],
  },
  plugins: [
    {
      rules: {
        "commit-rule": ({ raw }) => {
          return [
            /^\[(feat|fix|add|del|update|docs|style|build|refactor|revert|test|perf|chore)].+/g.test(raw),
            `commit备注信息格式错误,格式为 <[type] 修改内容>,type支持${types.join(",")}`,
          ];
        },
      },
    },
  ],
};

当我们 commit 提交信息时,就不能再随意写了,必须是 git commit -m 'fix: xxx' 符合类型的才可以,需要注意的是类型的后面需要用英文的 :,并且冒号后面是需要空一格的,这个是不能省略的。

结语

基于 Vue3+Vite+Pnpm+Vant3+Pinia+Vue-Router+Eslint+Prettier+Husky+lint-staged+commitlint 的开源的移动端模板,框架结构和命名采用前端目前通用的风格,可以适用于小型的想尝试用Vue3新技术的webapp项目,在此基础上进行二次开发。

github源码地址:https://github.com/qq575792372/vant-h5-template-plus

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue3+Vite项目配置Eslint+Prettier+Husky+Lint-Staged+Commitlint 的相关文章

  • vue 3.0新特性之reactive与ref

    vue 3 0新特性 参考 https www cnblogs com Highdoudou p 9993870 html https www cnblogs com ljx20180807 p 9987822 html 性能优化 观察者机
  • You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler to ex

    vue3项目启动之后 会提示如下警告 You are running the esm bundler build of vue i18n It is recommended to configure your bundler to expl
  • Property xxx was accessed during render but is not defined on instance

    vue3 x版本在结合element plus使用如果使用了表单元素以及v model指令会在控制台看到类似的警告 虽然不影响js运行 但是对于强迫症玩家难受的不行 下面我们来看一下这个问题是如何产生的 应该怎么解决 原因 vue3 x版本
  • vue3的一些知识点plus--3

    二十 兄弟组件传值 Bus 兄弟组件直接的传值 最基础的是通过同一个父级进行数值的传递 使用prop和emit 太过繁琐 父级 div a a b b div let flag ref false let getFlag params bo
  • Vue3的fragment

    vue2时 组件的模板结构中出现多个标签时 需要使用根标签 vue3时 组件的模板结构中出现多个标签时 可以不用根标签 这是因为vue3会自动将多个标签用fragment包裹 举个例子 main js import createApp fr
  • 25_Vue3路由-VueRouter的基本使用及动态路由和路由嵌套

    Vue3路由之Vue router的基本使用及路由嵌套和动态路由 认识前端路由 路由其实是网络工程中的一个术语 在架构一个网络时 非常重要的两个设备就是路由器和交换机 当然 目前在我们生活中路由器也是越来越被大家所熟知 因为我们生活中都会用
  • vue3.0基础知识浅谈

    vue3 0 首先创建vue3 0 项目 相比于vue2的变化 1 模板中可以没有根标签 2 main js中变化 组合API 一 setup 1 作用 2 返回值 3 注意点 4 参数 二 Ref函数 三 reactive函数 四 Ref
  • uni-app微信小程序开发自定义select下拉多选内容篇

    欢迎点击领取 前端面试题进阶指南 前端登顶之巅 最全面的前端知识点梳理总结 分享一个使用比较久的 技术框架公司的选型 uni app uni ui vue3 vite4 ts 需求分析 微信小程序 uni ui内容 1 创建一个自定义的下拉
  • vue3的provide

    provide 和 inject 通常成对一起使用 使一个祖先组件作为其后代组件的依赖注入方 无论这个组件的层级有多深都可以注入成功 只要他们处于同一条组件链上 provide 提供一个值 可以被后代组件注入 inject 注入一个由祖先组
  • vue3知识点:setup

    文章目录 二 常用 Composition API 1 拉开序幕的setup setup的两个注意点 本人其他相关文章链接 二 常用 Composition API 问题 啥叫 组合式API 答案 请看官方文档 https v3 cn vu
  • 不习惯的 Vue3 起步六 の Echarts绘制下钻地图

    序 看过一些可视化大屏展示地图的例子 准备动手做做 既然要开始比制作 那么先把目标定好 做一个展示中国城市的下钻地图 使用 Vue3 Vite Typescript echarts 实现效果 准备工作 创建项目 因为准备使用Vue3 Vit
  • vue.js -- 条件渲染

    目录 条件渲染 v if的用法 v if v else的用法 v if v else if v else的用法 v show的用法 v if 和 v show 的区别 条件渲染 v if的用法 代码演示
  • vue3知识点:Suspense组件

    文章目录 五 新的组件 3 Suspense 案例 完整代码 本人其他相关文章链接 五 新的组件 3 Suspense 等待异步组件时渲染一些额外内容 让应用有更好的用户体验 使用步骤 第1步 异步引入组件 import defineAsy
  • vue3-实现父子组件之间的通信(详解+源码)

    前言 vue3相对于vue2的父子传参方式有所改变 本文介绍三种 父组件给子组件传参 父组件调用子组件内的方法 子组件调用父组件的方法 如果不需要一种一种看可以直接下滑看全部代码 有注释也蛮好理解 一 父组件给子组件传参 1 父组件给子组件
  • vue项目中批量删除如何实现的

    简单回答 与单个删除的接口为同一个 然后通过数组对象的id来删除
  • vue3 通过自定义指令在table中滚动加载数据

    1 在utils文件中新建一个loadMore ts文件 import type Directive App from vue const debounce function func any delay any let timer any
  • vue3使用babel-plugin-import按需引入element-plus

    vue3使用babel plugin import按需引入element plus 2022年6月13日更新 用babel plugin import按需引入element plus会有问题 用官方推荐的方式真香了 以下是链接 https
  • 避免 Husky 因 monorepo 项目中每个不相关目录的更改而被触发

    我在我的 lerna monorepo 项目中使用 husky 该项目有多个目录 项目 husky front package json app package json on hook prepush我在 front 和 app 上启动测
  • element中表格组件的row-class-name和class-name属性的使用以及无效处理

    1 这两个属性的使用 row class name用在el table标签上 class name用在el table column标签上 两个属性即可绑定类名也可绑定函数
  • 仅检查新添加的文件

    我使用 lint staged 和 husky 在提交之前对所有暂存文件运行 linter 但我的代码库很旧 所以暂时不想对现有 修改后的 文件运行 linter 有没有办法只针对新创建 添加 的文件运行 linter None

随机推荐

  • linux shell脚本无法执行,报错syntax error near unexpected token `$'\r''解决方法

    最近一直忙于项目上的要求 在编写各种自动化安装的脚本 正好有一个需求是在之前的项目上编写过的 目前只需要拿来修改下即可 之前的shell脚本是在服务器上编写的 后来又已复制的方式存在在了电脑上 以txt文件的形式存放的 于是复制到了编辑工具
  • Spring知识点总结

    一 Spring框架介绍 Spring 是分层的 Java SE EE 应用 full stack 轻量级开源框架 以 IoC Inverse Of Control 反转控制 和 AOP Aspect Oriented Programmin
  • mybatis-mate相关配置

    Mybatis Mate 配置 mybatis mate cert grant 请添加微信wx153666购买授权 不白嫖从我做起 license SM hy2HGmqRZIw7NE5i1vKIiHOQLGXGymokyRCkR TYuNZ
  • html+jQuery自定义报告单

    html jQuery实现自定义报告单 功能 用户按需求自定义拼接生成报告单 支持打印功能 支持导出HTML CSS代码 截图 源码地址 customize report
  • java中byte和Byte详解

    写程序时 误把byte写作Byte 调试了许久 便将二者的区别及用法详细理解一遍 1 byte标题和Byte详解 byte是java的基本数据类型 存储整型数据 占据1个字节 8 bits 能够存储的数据范围是 128 127 Byte是j
  • Windows环境下ARM集成开发环境的搭建与使用

    Windows环境下能够使用Eclipse IDE for C C Developers来搭建ARM开发环境 本文地址 http blog csdn net u011833609 article details 30290655 安装过程例
  • 继续教育自动听课软件_2017继续教育挂机软件下载

    继续教育自动挂机软件2017是一款帮助用户挂机学习的辅助工具 有了它你就不用一直呆在电脑前了 它可以自动更新学习时间 自动换课计时 安全无病毒 方便快捷 省时省力省心 全国中小教师继续教育网的各种远程培训学习 全国各省份都能使用 使用教程
  • Valid注解在嵌套对象中校验失效

    接收对象声明 import lombok Data import javax validation constraints NotBlank import javax validation constraints NotNull impor
  • 数学的幽默打油诗

    1 常微分学常没分 数理方程没天理 实变函数学十遍 泛函分析心犯寒 微分拓扑躲不脱 随机过程随机过 微机原理闹危机 汇编语言不会编 量子力学量力学 机械制图机械制 2 高数 拉格朗日 傅立叶旁 我凝视你凹函数般的脸庞 微分了忧伤 积分了希望
  • 宁波到西塘可以坐火车去吗?

    宁波 嘉善 西塘宁波 嘉善火车 N406 N407 空调快速宁波15 10出发嘉善19 27到达4小时17分270公里硬座 42元硬卧 93元然后从嘉善打车到西塘 9公里 15元左右 坐快客3元也可以乘坐T794 空调特快宁波 10 41出
  • python 实现自动批量下载腾讯在线excel

    python 批量下载腾讯在线文档 如需要源代码供参考 可以留言邮箱 看到的话就发一下 pthon自动批量下载腾讯在线文档 对于大量实时更新维护的在线文档 可以随时轻松自动化批量下载在线文档 无需耗费人工下载 腾讯在线文档标签有时候会随版本
  • BP神经网络算法基本原理,BP神经网络算法流程图

    伤寒 副伤寒流行预测模型 BP神经网络 的建立 由于目前研究的各种数学模型或多或少存在使用条件的局限性 或使用方法的复杂性等问题 预测效果均不十分理想 距离实际应用仍有较大差距 NNT是Matlab中较为重要的一个工具箱 在实际应用中 BP
  • 爬虫中有关验证码的问题处理

    在爬虫中 经常要处理登陆的相关事宜 有时候登陆界面会需要提交验证码 如何处理验证码 解决办法 若是自己编写模块 需要涉及深度学习 这就是另一块大的内容了 在这里简单调用已经封装好的模块来实现获取验证码 本文以超级鹰为例 网址 http ww
  • PADS 原理图如何自动编号

    PADS原理图如何自动编号 PADS 原理图工具 PowerLogic exe 不支持元件位号重名 原生不提供自动编号功能 虽然 PowerPCB exe 可以支持元件位号自动编号功能再同步到原理图 但是其局限性太大没啥实际意义 另外 PA
  • YUV格式学习:YUYV、YVYU、UYVY、VYUY格式转换成RGB

    YUYV YVYU UYVY VYUY格式 它们都是YUV422的打包格式 即在内存中 Y U V都是挨着排序的 它们的名称就表示了Y U V的顺序 像YUYV 就是Y U Y V Y U Y V 在做转换时 就显得很容易 简单了 因为极其
  • 【卷积核设计】10、Scaling Up Your Kernels to 31x31

    文章目录 一 背景 二 方法 三 RepKLNet a Large Kernel Architecture 3 1 结构 3 2 尽可能的让卷积核变大 3 3 图像分类 3 4 语义分割 3 5 目标检测 四 分析 五 限制 六 结论 论文
  • 【笔试强训选择题】Day43.习题(错题)解析

    作者简介 大家好 我是未央 博客首页 未央 303 系列专栏 笔试强训选择题 每日一句 人的一生 可以有所作为的时机只有一次 那就是现在 文章目录 前言 一 Day43习题 错题 解析 总结 前言 一 Day43习题 错题 解析 1 解析
  • Elasticsearch笔记4 基础入门

    执行分布式检索 一个查询操作 在ES分布式环境中分为两步 查询与合并 查询阶段 ES集群向所有分片传递查询语句 分片接收到请求后 执行搜索并建立一个长度为top n的优先队列 存储结果 top n 的大小取决于分页参数 top n from
  • 链表c语言stl,C++STL之List容器

    1 再谈链表 List链表的概念再度出现了 作为线性表的一员 C 的STL提供了快速进行构建的方法 为此 在前文的基础上通过STL进行直接使用 这对于程序设计中快速构建原型是相当有必要的 这里的STL链表是单链表的形式 2 头文件 头文件
  • Vue3+Vite项目配置Eslint+Prettier+Husky+Lint-Staged+Commitlint

    Eslint 配置 ESLint 是一个插件化并且可配置的 JavaScript 语法规则和代码风格的检查工具 ESLint 能够帮你轻松写出高质量的 JavaScript 代码 1 建议 vscode 安装 Eslint 的插件 这个插件