初始化前端项目配置 eslint、prettier、husky 等等

2023-11-10

每次新项目都要重新配置一遍,有点麻烦,记录一下。

一、配置 ESLint

1.1 核心配置

执行 npm init @eslint/config 命令进行初始化,根据提示一路下一步即可,完成后会自动生成 eslintrc 文件并安装相关依赖。

1.2 React 编译模式配置

如果 React 使用的是新的编译模式(无需手动导入 React),需要在 extends 中加入 plugin:react/jsx-runtime

{
  "extends": [
    "plugin:react/jsx-runtime",
  ],
}

同时 tsconfig 文件中的 “jsx”: “react-jsx” 也是对应的新模式。

1.3 React 属性自动排序规则配置

安装依赖:

ni -D eslint-plugin-react 

确保 eslint 配置文件中 extends 部分存在 plugin:react/recommended

React 组件的属性可以借助 eslint 的能力来进行自动排序,在配置文件的 rule 中打开即可。

{
  "rules": {
    "react/jsx-sort-props": [
      "error",
      {
        "callbacksLast": true
      }
    ]
  }
}

二、配置 Prettier

2.1 核心配置

# 安装 prettier
ni -D prettier

# 安装 prettier 整合 eslint 的库
ni -D eslint-plugin-prettier eslint-config-prettier

新建 .prettierrc 文件,并写入以下内容:

{
  "singleQuote": true,
  "tabWidth": 2,
  "semi": false,
  "trailingComma": "none",
  "plugins": []
}

eslint 配置文件中加入

{
  "extends": ["plugin:prettier/recommended"]
}

2.13 安装扩展插件

# package.json 字段排序插件
ni -D prettier-plugin-packagejson

# import 顺序自动调整插件
ni -D prettier-plugin-organize-imports

在配置文件中指定上述两个插件:

{
  "plugins": ["prettier-plugin-packagejson", "prettier-plugin-organize-imports"]
}

三、配置 commitlint

安装依赖:

ni -D @commitlint/{cli,config-conventional}

生成配置文件:

echo "module.exports = { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js

验证是否生效:

npx commitlint --from HEAD~1 --to HEAD --verbose

如果遇到报 ES Module 相关错误,将 commitlint.config.js 文件后缀改为 cjs 即可。

四、配置 stylelint

安装依赖:

ni -D stylelint stylelint-config-recess-order stylelint-config-standard-scss stylelint-prettier

新建 .stylelintrc.json 文件并加入以下配置:

{
  "plugins": ["stylelint-prettier"],
  "rules": {
    "prettier/prettier": true
  },
  "extends": [
    "stylelint-prettier/recommended",
    "stylelint-config-recess-order",
    "stylelint-config-standard-scss"
  ]
}

五、配置 lint-staged

安装依赖:

ni -D lint-staged

新建配置文件 .lintstagedrc.json 并写入如下内容:

{
  "*.{css,scss}": "stylelint --fix",
  "*": "prettier --ignore-unknown --write",
  "*.{js,jsx,ts,tsx}": "eslint --fix"
}

六、配置 Husky

安装依赖:

ni -D husky

生成相关配置文件:

npm pkg set scripts.prepare="husky install"
npm run prepare

添加钩子:

# git commit 时检查提交信息是否符合规范
npx husky add .husky/commit-msg  'npx --no -- commitlint --edit ${1}'

# git commit 时触发 lint-staged,使用上面的那些 lint 工具检查并格式化一遍有改动的代码文件。
npx husky add .husky/pre-commit "npx lint-staged"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初始化前端项目配置 eslint、prettier、husky 等等 的相关文章

  • 在 Javascript 中用序列号映射数组

    下面的代码 let myArray Array apply null length 10 map Number call Number 创建以下数组 0 1 2 3 4 5 6 7 8 9 我只是不明白为什么 我在互联网上找不到任何解释这种
  • 如何动态地从对象中提取所有元素

    如何从对象中提取特定列 我有一个列数组 我希望从对象中提取这些字段 该对象将由作为项目的映射循环函数构造 现在在这里 如何动态检查我的字段 我不想要这样的 item col 0 请告诉我一个捷径 const person firstName
  • jQuery 会在过滤选择器中的其他参数之前搜索 ID 吗?

    这个问题与性能有关 如果我使用如下选择器 myID a Does this find myID and filter by a 或者我应该这样写声明 myID find a 我不确定 jQuery 是否足够聪明 可以首先使用 ID 执行此语
  • 使用 ReactJS 旋转图像预览

    我正在尝试使用 ReactJS 旋转图像的预览 因此 我首先允许渲染预览的上传功能 然后在用户点击上传之前 我希望他们可以选择根据自己的喜好旋转图像 这是我用来预览图像的 class ImageUpload extends React Co
  • Jquery - 如何替换div中的一个单词?

    我有一个从其他位置复制的 div 我需要更改其中的一个单词 这是 HTML div class dealer addy 8726 N Royal Ln br Irving TX 75063 br email protected cdn cg
  • 如何使用角度在垫选择嵌套值中包含过滤器

    我正在使用带有嵌套下拉菜单的有角材料 下拉值以父级和子级为基础嵌套 我面临两个问题 自动建议不起作用 如果我输入父名称或其关联的子名称 则必须以展开模式过滤并显示特定的父视图 如果我展开第一个父视图并尝试展开第二个父视图 则第一个父视图应在
  • 如果用户禁用了 javascript,如何回退到完全不同的索引页面?

    我有一个大型 动态生成的单页网站 该网站严重依赖 javascript 我想为没有 javascript 的人提供后备 每个版本必须有不同的 php 代码 所以基本上我需要一个完全不同的索引页面 我不想将所有内容都包装在 javascrip
  • 如何使用 JavaScript 获取光标下的单词?

    如果我有 p some long text p 在我的 HTML 页面上 我如何知道鼠标光标位于 文本 一词上方 我的另一个答案仅适用于 Firefox 这个答案适用于 Chrome 也许在 Firefox 中也能工作 我不知道 funct
  • 系统js语法错误,IE11

    我有一个 Angular 2 应用程序可以在 Firefox 和 Chrome 中工作 但在 IE 中却没有那么多工作 根据我的堆栈跟踪 我的 System js 设置似乎存在问题 这是我在网络控制台中看到的错误描述 Error Syste
  • iPhone Web 应用程序禁用缓存

    我使用 PHP 构建了一个 iPhone 网络应用程序 主 也是唯一 页面包括苹果移动网络应用程序支持 and 苹果触摸全屏元标记 以便在添加到主屏幕后可以全屏运行 然而 似乎每次我从主屏幕启动应用程序时 都会使用页面的缓存版本而不是刷新页
  • JavaScript 回调的效率

    我只是想证实我的一个怀疑 我偶然发现了一篇文章 建议按以下方式使用 Socket io var app require express createServer var io require socket io listen app app
  • Django 管理中的自定义依赖下拉菜单

    我有一个按阶段模型的项目外键 我很难在 Django 管理页面中创建依赖的下拉列表 我想当用户从该项目的 项目下拉 阶段选择一个项目时 在第二个下拉菜单中显示 实现这一目标的最佳方法是什么 如果下拉列表根据其父级的值来过滤项目 那就太好了
  • 链接index.html client.js 和 server.js

    我从 Node js 开始 我的第一个程序已经遇到了问题 下面是我正在使用的代码 索引 html
  • Firebase 停止监听 onAuthStateChanged

    从版本 3 0 0 开始 我很难删除身份验证状态更改侦听器 要根据文档启动侦听器 firebase auth onAuthStateChanged function user handle it 但是 我在文档中找不到任何涉及删除身份验证状
  • up() 和 down() 与 Ext.getCmp()

    我很困惑我需要在 up down 和 Ext getCmp ID 之间使用哪一个作为 grep 对象 对我来说 定义对象的 ID 并通过 Ext getCmp ID 检索对象更容易 而且代码看起来更干净 例如 console log thi
  • Python 中 Javascript 的 reduce()、map() 和 filter() 的等价物是什么?

    Python 的等价物是什么 Javascript function wordParts currentPart lastPart return currentPart lastPart word Che mis try console l
  • 使用预先存在的数据库创建 PhoneGap iOS 应用程序

    我最近开始开发一个使用 PhoneGap 版本 2 8 0 作为药物查找器的应用程序 过去 我创建了该工具的 Web 版本 它使用 jQuery Mobile 和 PHP 来访问远程 SQL 数据库 PhoneGap 似乎是一个很有吸引力的
  • jQuery 分钟和秒倒计时器

    我想创建一个 jquery 倒计时器 我尝试了以下代码 但它不起作用 我该怎么办 DEMO https jsfiddle net tbosn210 https jsfiddle net tbosn210 var interval setIn
  • React Native:当您的应用程序关闭时是否有回调函数?

    我有一个 setInterval 即使您关闭 而不是退出 应用程序也会继续运行 我想在我的应用程序关闭或设备进入睡眠状态时调用一个函数 以便清除 setInterval AppState 是你的朋友 看看AppState 的文档 https
  • Jquery 脉动改变颜色或图像

    我正在尝试使用 jquery 脉动代码让 div 改变颜色 但我希望它从红色变为黑色 但我听说要做到这一点 你必须下载某个插件 所以我希望它脉动为图片 到目前为止我有这两个代码 img src 36 gif alt width 105 he

随机推荐

  • /var/lib/docker目录迁移

    简介 docker用起来简单 但是要用到实际线上业务当中细节问题往往影响整个系统的稳定 比如docker容器在物理机上的数据卷问题 docker默认的根目录是 var lib docker 容器使用一段时间后会发现该目录所占磁盘会非常大 小
  • js获取当前ip地址

    方法一 用搜狐的接口查询IP地址 方法二 国外一个网站提供的ip查询服务
  • Web学习笔记-React(路由)

    笔记内容转载自 AcWing 的 Web 应用课讲义 课程链接 AcWing Web 应用课 CONTENTS 1 Web分类 2 Route组件 3 URL中传递参数 4 Search Params传递参数 5 重定向 6 嵌套路由 本节
  • 纯js判断文件流格式类型:pdf,doc,docx,xls,xlsx,ppt,pptx一次搞定!

    目录 使用js判断文件类型的场景 方法特点 输入输出 方法步骤 1 查看每种格式文件的16进制码 提取不同文件类型的 特征数 2 先判断大类型 在具体大类下判断小类型 项目地址 纯前端基于react实现的多类型文件预览 通过arraybuf
  • java中的string是什么意思_java中String[][] 是什么东西?string[]又是什么东西?

    展开全部 String 是二维数组 例如 String str new String 4 4 这是创建了一个有4行4列元32313133353236313431303231363533e78988e69d8331333366306433素的
  • 看完这篇 教你玩转渗透测试靶机vulnhub——FunBox11(Scriptkiddie)

    Vulnhub靶机FunBox11 Scriptkiddie 渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 FTP匿名登入 漏洞发现 漏洞利用 获取flag Vu
  • 解读《“三板斧”-阿里巴巴管理之道》

    三板斧 阿里巴巴管理之道 1 管理的真相是什么 三板斧 是阿里巴巴的一门培训课程 形象一点比喻分别是 揪头发 指组织中的向上思考 照镜子 指团队中的自我认知 闻味道 指发展中的精神融合 这三点说的是组织中的管理者如何通过管理团队的力量 成就
  • 如何在Win10中安装Visual Studio 6.0

    随着微软Windows操作系统的不断升级 尤其是升级到64位系统后 很多原有32位的开发软件在如今的win10 11系统上运行时会遇到很多问题 比如 笔者就曾遇到的过去很熟悉的VC 6 0在win10中安装后 一打开文件 程序就闪退的问题
  • redis基础1——发展历程+源码安装及配置+基本常识

    文章目录 一 NOSQL概述 1 1 单机Mysql的演进 1 2 什么是Nosql 1 3 Nosql的四大分类 1 3 1 KV键值对型 1 3 2 文档型数据库 bson格式 和json一样 1 3 3 列存储数据库 1 3 4 图数
  • PCB中电流与线宽 电流与过孔的关系

    1 一般认为20mil走线可以过1A电流 有一定余量 2 0 5mm 20mil 过孔可以过1A电流 有一定余量 如果2A电流放置0 25mm 10mil 过空作为载流 至少放置四个过孔 制作最小过孔的能力与板厂的制作能力和工艺有关系 嘉立
  • mysql设置开机自启后依然无法自启动

    一般情况下设置的开机自启 一般情况下这样设置就可以实现开机自启了 但是有部分天选之子不行 例如看见博客的你我 明明设置了开机自启 但每次打开数据库却连不上 还需要自己手动启动 乌鱼 解决办法 1 第一步 我们查看系统启动日志 方法如下 cm
  • python运维开发工程师养成记(break语句)

    图示 案例 下节分享continue语句 链接 https ke qq com course 4300856 tuin d8aedf68
  • 【区块链】#区块链 ipfs介绍及环境配置

    需要在答辩之前做一点demo进行展示 好给评委老师展示我们的预期成果 组长最后挑选了IPFS作为初级的展示工具 我们的第一次在链上操作就开始了 区块链具有去中心化 不可篡改 智能合约的一些特性 其实大家都知道区块链是这几年因为比特币的火而赶
  • Java:进化的尽头

    Java Evolutionary Dead End January 3 2008 我在比利时安特卫普举办的Javapolis大会上刚做完一个主题演讲 现在是周五早上 前一天Josh Bloch作了发言 谈到了在closures 闭包 建议
  • React 入门 以及使用antd框架,并且封装分页组件、使用表格分页

    安装 安装React项目 npm i g create react app create react app demo demo就是的项目名字 Ant Design 框架的安装 npm install antd save 找到APP css
  • C++工厂类和单例模式的结合使用

    单例模式 简单来说一个类只有一个实例且封装性好 这里用宏定义实现 animal singleton h pragma once include
  • vue+element根据表格行数据弹窗展示详情信息

    效果图 代码 div class center container div
  • 解决Unity打包出来的内嵌安卓程序退出时的卡死闪退问题

    最近unity打出来的内嵌程序出现了退出unity程序到主app时的闪退卡死现象 一开始以外是自己的内部API application quit 和安卓的api finish 冲突了 后来发现不是 想起同事说之前的程序不会这样 就思考自己改
  • 调试笔记--STM32连不上仿真器

    前段时间买了一个STM32F407的开发板 打算做一点小实验 因为之前就用过STM32系列 算是比较熟悉 也没有太在意 安装完Keil后直接开始下载代码试试 问题出现了 问题现象 Keil下代码编译通过 但是下载FLASH和在线调试都报错
  • 初始化前端项目配置 eslint、prettier、husky 等等

    每次新项目都要重新配置一遍 有点麻烦 记录一下 一 配置 ESLint 1 1 核心配置 执行 npm init eslint config 命令进行初始化 根据提示一路下一步即可 完成后会自动生成 eslintrc 文件并安装相关依赖 1