vue3项目最新eslint9+prettier+husky+stylelint+vscode配置

一、eslint9和prettier通用配置

安装必装插件

ESlint@9.x

pnpm add eslint@latest -D

ESlint配置 vue 规则 , typescript解析器

pnpm add eslint-plugin-vue typescript-eslint -D

ESlint配置 JavaScript 规则

pnpm add @eslint/js -D

配置所有全局变量 globals

pnpm add globals -D

eslint 兼容prettier插件

pnpm add  eslint-plugin-prettier -D

prettier 插件

pnpm add prettier -D

eslint.config.js通用配置文件(可直接复制使用)

import globals from 'globals'
import eslint from '@eslint/js'
import tseslint from 'typescript-eslint'
import eslintPluginVue from 'eslint-plugin-vue'
import vueParser from 'vue-eslint-parser'
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'export default [{ignores: ['node_modules','dist','.gitignore','package.json','package-lock.json','dist-ssr','*.local','.npmrc','.DS_Store','dev-dist','dist_electron','*.d.ts','src/assets/**']},/** js推荐配置 */eslint.configs.recommended,/** vue推荐配置 */...eslintPluginVue.configs['flat/recommended'],/** prettier 配置 */eslintPluginPrettierRecommended,//javascript 规则{files: ['**/*.{js,mjs,cjs,vue,ts}'],rules: {// 对象结尾逗号'comma-dangle': 'off',// 关闭未定义变量'no-undef': 'off',// 确保 Prettier 的行为不会被 ESLint 覆盖quotes: ['error', 'single', { allowTemplateLiterals: true }],// 关闭对未定义变量的警告'no-undefined': 'off',//不使用的变量不报错'no-unused-vars': 'off',// 禁止使用不规范的空格'no-irregular-whitespace': 'off',// 函数括号前的空格'space-before-function-paren': 0,// 箭头函数的空格'arrow-spacing': [2,{before: true,after: true}],// 代码块的空格'block-spacing': [2, 'always'],// 大括号风格'brace-style': [2,'1tbs',{allowSingleLine: true}],// 对象属性换行'object-property-newline': 'off',// JSX 引号风格'jsx-quotes': [2, 'prefer-single'],// 对象键值对之间的空格'key-spacing': [2,{beforeColon: false,afterColon: true}],// 关键字之间的空格'keyword-spacing': [2,{before: true,after: true}],// 构造函数首字母大写'new-cap': [2,{newIsCap: true,capIsNew: false}],// new 操作符使用时需要括号'new-parens': 2,// 禁止使用 Array 构造函数'no-array-constructor': 2,// 禁止调用 caller 和 callee'no-caller': 2,// 禁止重新分配类名'no-class-assign': 2,// 禁止条件中的赋值操作'no-cond-assign': 2,// 禁止 const 重新分配'no-const-assign': 2,// 正则表达式中的控制字符'no-control-regex': 0,// 禁止删除变量'no-delete-var': 2,// 禁止在函数参数中使用重复名称'no-dupe-args': 2,// 禁止在类中使用重复名称的成员'no-dupe-class-members': 2,// 禁止在对象字面量中使用重复的键'no-dupe-keys': 2,// 禁止重复的 case 标签'no-duplicate-case': 2,// 禁止空的字符类'no-empty-character-class': 2,// 禁止空的解构模式'no-empty-pattern': 2,// 禁止使用 eval'no-eval': 2,// 不允许出现空的代码块'no-empty': 2,// 禁止不必要的布尔转换'no-extra-boolean-cast': 2,// 禁止不必要的括号'no-extra-parens': [2, 'functions'],// 禁止 case 语句落空'no-fallthrough': 2,// 禁止在数字后面添加小数点'no-floating-decimal': 2,// 禁止对函数声明重新赋值'no-func-assign': 2,// 禁止出现歧义多行表达式'no-unexpected-multiline': 2,// 禁止不需要的转义'no-useless-escape': 0,// 数组的括号前后的间距'array-bracket-spacing': [2, 'never']}},// vue 规则{files: ['**/*.vue'],languageOptions: {parser: vueParser,globals: { ...globals.browser, ...globals.node },parserOptions: {/** typescript项目需要用到这个 */parser: tseslint.parser,ecmaVersion: 'latest',/** 允许在.vue 文件中使用 JSX */ecmaFeatures: {jsx: true}}},rules: {'vue/component-definition-name-casing': 'off','vue/singleline-html-element-content-newline': ['off'],'vue/no-mutating-props': ['error',{shallowOnly: true}],// 要求组件名称始终为 “-” 链接的单词'vue/multi-word-component-names': 'off',// 关闭 index.html 文件报 clear 错误'vue/comment-directive': 'off',// 关闭对 defineProps 的有效性检查'vue/valid-define-props': 'off',// 允许在一个文件中定义多个组件'vue/one-component-per-file': 'off',// 关闭 Prop 类型要求的警告'vue/require-prop-types': 'off',// 关闭属性顺序要求'vue/attributes-order': 'off',// 关闭对默认 Prop 的要求'vue/require-default-prop': 'off',// 关闭连字符命名检验'vue/attribute-hyphenation': 'off',// 关闭自闭合标签的要求'vue/html-self-closing': 'off',// 禁止在关闭的括号前有换行'vue/html-closing-bracket-newline': 'off',// 允许使用 v-html 指令'vue/no-v-html': 'off'}}
]

.prettierrc.js 通用配置文件(可直接复制使用)

注意如prettier配置的格式没效果可更改文件后缀为.prettierrc.json或.prettierrc.yaml

module.exports = {printWidth: 120, // 一行的字符数换行tabWidth: 2, // 一个tab代表几个空格数useTabs: false, // 是否使用tab进行缩进singleQuote: true, // 字符串是否使用单引号semi: false, // 行尾是否使用分号,默认为truetrailingComma: 'none', // 是否使用尾逗号arrowParens: 'avoid', // 箭头函数单变量省略括号bracketSpacing: true, // 对象大括号直接是否有空格,默认为true,效果:{ foo: bar }endOfLine: 'auto', // 保留在 Windows 和 Unix 下的换行符quoteProps: 'preserve' // 对象属性的引号使用
}

package.json 的scripts配置

  "scripts": {"lint:fix": "eslint . --fix","lint": "eslint .",},

.prettierignore 配置文件

.DS_Store
node_modules
dist
dist-ssr
*.local
.npmrc
dev-dist
dist_electron
auto-imports.d.ts

二、配置git hooks提交检验

安装lint-staged

mrm 安装 lint-staged 的同时会安装 husky

pnpm install mrm -D
npx mrm lint-staged

然后它会自动在package.json文件中的script对象中生成

"prepare": "husky install"

生成的可能只有一条或俩条,自己再加几条

"lint-staged": {"*.{js,jsx,vue,ts,tsx}": ["eslint --fix","prettier --write"],"*.{scss,less,css,html,md}": ["prettier --write"],"package.json": ["prettier --write"],"{!(package)*.json,.!(browserslist)*rc}": ["prettier --write--parser json"]}

同时在根目录也会生成.husky目录,如下图
在这里插入图片描述

配置 commitlint

pnpm install @commitlint/cli @commitlint/config-conventional -D  
npx husky add .husky/commit-msg "npx --no-install commitlint --edit $1"    

当运行之后就会生成这样如下图
在这里插入图片描述

如没有自动生成,手动创建文件,复制以下内容

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"npx --no -- commitlint --edit ${1}

新建commitlint.config.cjs

module.exports = {extends: ['@commitlint/config-conventional'],rules: {'type-enum': [// type枚举2,'always',['build', // 编译相关的修改,例如发布版本、对项目构建或者依赖的改动'feat', // 新功能'fix', // 修补bug'docs', // 文档修改'style', // 代码格式修改, 注意不是 css 修改'refactor', // 重构'perf', // 优化相关,比如提升性能、体验'test', // 测试用例修改'revert', // 代码回滚'ci', // 持续集成修改'config', // 配置修改'chore', // 其他改动],],'type-empty': [2, 'never'], // never: type不能为空; always: type必须为空'type-case': [0, 'always', 'lower-case'], // type必须小写,upper-case大写,camel-case小驼峰,kebab-case短横线,pascal-case大驼峰,等等'scope-empty': [0],'scope-case': [0],'subject-empty': [2, 'never'], // subject不能为空'subject-case': [0],'subject-full-stop': [0, 'never', '.'], // subject以.为结束标记'header-max-length': [2, 'always', 72], // header最长72'body-leading-blank': [0], // body换行'footer-leading-blank': [0, 'always'], // footer以空行开头},
}

配置完成可提交代码测试

三、.editorconfig 编辑器配置

项目根目录创建 .editorconfig文件

# 修改配置后重启编辑器
# 配置项文档:https://editorconfig.org/# 告知 EditorConfig 插件,当前即是根文件
root = true# 适用全部文件
[*]
## 设置字符集
charset = utf-8
## 缩进风格 space | tab,建议 space(会自动继承给 Prettier)
indent_style = space
## 缩进的空格数(会自动继承给 Prettier)
indent_size = 2
## 换行符类型 lf | cr | crlf,一般都是设置为 lf
end_of_line = lf
## 是否在文件末尾插入空白行
insert_final_newline = true
## 是否删除一行中的前后空格
trim_trailing_whitespace = true# 适用 .md 文件
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

四、 stylelint 配置

vscode 安装插件Stylelint

在这里插入图片描述

使用scss作为预处理器,安装以下依赖:

pnpm add sass sass-loader stylelint postcss postcss-scss postcss-html stylelint-config-prettier stylelint-config-recess-order stylelint-config-recommended-scss stylelint-config-standard stylelint-config-standard-vue stylelint-scss stylelint-order stylelint-config-standard-scss -D

新建 .stylelintrc.cjs

在项目根目录下新建 .stylelintrc.cjs,并填入如下代码:

module.exports = {extends: ['stylelint-config-standard', // 配置stylelint拓展插件'stylelint-config-html/vue', // 配置 vue 中 template 样式格式化'stylelint-config-standard-scss', // 配置stylelint scss插件'stylelint-config-recommended-vue/scss', // 配置 vue 中 scss 样式格式化'stylelint-config-recess-order', // 配置stylelint css属性书写顺序插件,'stylelint-config-prettier', // 配置stylelint和prettier兼容],overrides: [{files: ['**/*.(scss|css|vue|html)'],customSyntax: 'postcss-scss',},{files: ['**/*.(html|vue)'],customSyntax: 'postcss-html',},],ignoreFiles: ['**/*.js','**/*.jsx','**/*.tsx','**/*.ts','**/*.json','**/*.md','**/*.yaml',],/*** null  => 关闭该规则* always => 必须*/rules: {'value-keyword-case': null, // 在 css 中使用 v-bind,不报错'no-descending-specificity': null, // 禁止在具有较高优先级的选择器后出现被其覆盖的较低优先级的选择器'function-url-quotes': 'always', // 要求或禁止 URL 的引号 "always(必须加上引号)"|"never(没有引号)"'no-empty-source': null, // 关闭禁止空源码'selector-class-pattern': null, // 关闭强制选择器类名的格式'property-no-unknown': null, // 禁止未知的属性(true 为不允许)'block-opening-brace-space-before': 'always', //大括号之前必须有一个空格或不能有空白符'value-no-vendor-prefix': null, // 关闭 属性值前缀 --webkit-box'property-no-vendor-prefix': null, // 关闭 属性前缀 -webkit-mask'selector-pseudo-class-no-unknown': [// 不允许未知的选择器true,{ignorePseudoClasses: ['global', 'v-deep', 'deep'], // 忽略属性,修改element默认样式的时候能使用到},],},
}

新建 .stylelintignore 文件

在项目根目录下新建 .stylelintignore 文件,并填入如下代码:

/node_modules/*
/dist/*
/html/*
/public/*

添加脚本

packjson.json 文件的 script 字段中添加命令

"lint:style": "stylelint src/**/*.{css,scss,vue} --cache --fix"

五、 项目中根目录下 .vscode 的配置

┌─根目录
│  ├─.vscode
│  │  └─settings.json

settings.json

{"prettier.enable": true,"editor.codeActionsOnSave": {"source.fixAll.eslint": "explicit"},"[vue]": {"editor.defaultFormatter": "esbenp.prettier-vscode"},"[javascript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"},"[typescript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"},"[json]": {"editor.defaultFormatter": "esbenp.prettier-vscode"},"[jsonc]": {"editor.defaultFormatter": "esbenp.prettier-vscode"},"[html]": {"editor.defaultFormatter": "esbenp.prettier-vscode"},"[css]": {"editor.defaultFormatter": "esbenp.prettier-vscode"},"[scss]": {"editor.defaultFormatter": "esbenp.prettier-vscode"},"eslint.validate": ["javascript","vue","vue-html","typescript","typescriptreact","html","css","scss","less","json","jsonc","json5","markdown"]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【环境搭建】WordPress本地部署搭建及历史版本插件安装(windows系统)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍收藏💗支持一下哦 【环境搭建】WordPress本地部署搭建及历史版本插件安装(windows系统) WordPress搭建环境部署(…

qt QTemporaryFile详解

1、概述 QTemporaryFile类是Qt框架中用于创建和管理临时文件的类。它提供了一个安全且便捷的方式来生成唯一的临时文件,这些文件通常用于存储临时数据,如缓存、草稿或中间结果。QTemporaryFile确保了临时文件的唯一性,避免了文件名冲突&…

Gitee配置以及如何将本地项目提交到远程仓库

文章目录 准备远程仓库配置注册新建仓库 配置git 生成ssh,输入以下命令,然后连敲三次回车键配置公钥本地代码上传 准备 1.本地下载git 2.注册远程仓库账号 远程仓库配置 注册 官网:https://gitee.com 完成注册 新建仓库 头像->设置-…

基于Java和Vue开发的漫画阅读软件漫画阅读小程序漫画APP

前景分析 受众广泛:漫画的受众群体广泛,不仅限于青少年,还涵盖了成年人等多个年龄层和社会阶层。漫画文化在全球范围内的影响力不断扩大,未来漫画软件创业可以考虑全球市场的拓展。 市场需求大:数字化阅读趋势下&…

2024.12.2——[极客大挑战 2019]Secret File 1

知识点:抓包 代码审计 filter伪协议 一、解题步骤 step 1 查看源代码中的信息 查看源代码发现一个php文件:[./Archive_room.php](http://72df1f22-85bf-47bb-b23a-efcaf88701d4.node5.buuoj.cn:81/Archive_room.php) 点进去后发现没什么用&#xff0c…

距离与AoA辅助的三维测距算法,适用于自适应基站数量的情况。订阅专栏后可直接查看完整源代码

本MATLAB 代码实现了一个基于距离与到达角(AoA)的三维测距系统,主要用于在动态环境中估计目标物体的位置。提供本算法与仅侧角(AoA)的定位误差对比 文章目录 代码运行结果源代码代码功能概述主要步骤分析初始化部分AOA定位绘图部分输出部分代码的应用和意义总结代码运行结…

[241206] X-CMD 发布 v0.4.15:env 升级,mirror 支持华为/腾讯 npm 镜像,pb-wayland 剪贴板

目录 X-CMD 发布 v0.4.15📃Changelog📦 env|pkg🪞 mirror📑 pb🎨 theme|starship|ohmyposh🤖 chat📝 man✅ 升级指南 X-CMD 发布 v0.4.15 📃Changelog 📦 env|pkg 新增…

Python办公—DataMatrix二维条码制作

目录 专栏导读1、库的介绍2、库的安装3、核心代码4、完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…

Webpack Tree Shaking 技术原理及应用实战,优化代码,精简产物

前言 在前端开发中,优化代码体积和提升应用性能是至关重要的课题。Webpack 提供了多种优化手段来帮助开发者实现这一目标,Tree Shaking 就是其中一种非常重要的优化技术,它通过在编译阶段移除未被使用的代码模块,从而显著减小最终…

『RabbitMQ』 windows下 安装RabbitMQ 并在Python中使用测试

目录 1. 安装ERLANG2. 安装RabbitMQ3. 新建用户Python的测试代码 生产者和消费者总结欢迎关注 『RabbitMQ』 专栏,持续更新中 欢迎关注 『RabbitMQ』 专栏,持续更新中 1. 安装ERLANG 下载之前先看兼容性,这里我打算下载26.1版本的Erlang以适配RabbitMQ cloud.emqx.com/cons…

SwiftUI 列表(或 Form)子项中的 Picker 引起导航无法跳转的原因及解决

概述 在 SwiftUI 的界面布局中,列表(List)和 Form 是我们秃头码农们司空见惯的选择。不过大家是否知道:如果将 Picker 之类的视图嵌入到列表或 Form 的子项中会导致导航操作无法被触发。 从上图可以看到:当在 List 的…

Ubuntu Linux 文件、目录权限问题

本文为Ubuntu Linux操作系统- 第五弹 此文是在上期文件目录的内容操作基础上接着讲权限问题 上期回顾:Ubuntu Linux 目录和文件的内容操作 文件访问者身份与文件访问权限 Linux文件结构 所有者(属主)所属组(属组)其他…

2020年国赛高教杯数学建模E题校园供水系统智能管理解题全过程文档及程序

2020年国赛高教杯数学建模 E题 校园供水系统智能管理 原题再现 校园供水系统是校园公用设施的重要组成部分,学校为了保障校园供水系统的正常运行需要投入大量的人力、物力和财力。随着科学技术的发展,校园内已经普遍使用了智能水表,从而可以…

最新版Chrome谷歌加载ActiveX控件之金格iWebOffice2015控件

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

【Flink-scala】DataStream编程模型之水位线

DataStream API编程模型 1.【Flink-Scala】DataStream编程模型之 数据源、数据转换、数据输出 2.【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 3.【Flink-scala】DataStream编程模型之 窗口计算-触发器-驱逐器 文章目录 DataStream API编程模型前言…

iOS平台接入Facebook登录

1、FB开发者后台注册账户 2、完善App信息 3、git clone库文件代码接入 4、印尼手机卡开热点调试 备注: 可能遇到的问题: 1、Cocos2dx新建的项目要更改xcode的git设置,不然卡在clone,无法在线获取FBSDK 2、动态库链接 需要在…

unity打包web,发送post请求,获取地址栏参数,解决TypeError:s.replaceAll is not a function

发送post请求 public string url "http://XXXXXXXXX";// 请求数据public string postData "{\"user_id\": 1}";// Start is called before the first frame updatevoid Start(){// Post();StartCoroutine(PostRequestCoroutine(url, postData…

VTK编程指南<三>:基于VTK入门程序解析来理解VTK基础知识

1、VTK入门程序 下面是一个完整的Vtk入门程序&#xff0c;我们基于这个程序来对VTK的基本知识进行一个初步了解。 #include <iostream>#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2);// VTK was built with vtkRenderingOpenGL2 VTK_MODULE_INI…

大语言模型应用Text2SQL本地部署实践初探

自从两年前OpenAI公司发布ChatGPT后&#xff0c;大模型(Large Language Model&#xff0c;简称LLM)相关技术在国内外可谓百家争鸣&#xff0c;遍地开花&#xff0c;在传统数据挖掘、机器学习和深度学习的基础上&#xff0c;正式宣告进入快速发展的人工智能(Artificial Intellig…

shell脚本实战案例

文章目录 实战第一坑功能说明脚本实现 实战第一坑 实战第一坑&#xff1a;在Windows系统写了一个脚本&#xff0c;比如上面&#xff0c;随后上传到服务&#xff0c;执行会报错 原因&#xff1a; 解决方案&#xff1a;在linux系统touch文件&#xff0c;并通过vim添加内容&…