前端项目工程化搭建

news2024/11/24 6:29:53

ESLint

在开发过程中,需要遵循一些规范,可以使用下面的工具来配置不同项目需要遵循的规范,来帮助我们检查错误、约束开发过程。

ESLint 配置

使用 Taro CLI 创建的项目,会自动生成 .eslintrc 文件。只需要在这个文件的 rules 配置项中配置相应的规则,在开发过程中,编译器会自动检查所写的代码是否符合规范,不规范的代码编译器会自动提示。

一些常见的 ESLint 规则如下:

{
  // TODO:待补充
  "rules": {
    // 禁止出现未使用过的变量
    "no-unused-vars": "off",
    // 缩进风格
    "indent": ["error", 2],
    // 是否应该在行尾使用分号
    "semi": ["error", "always", { "omitLastInOneLineBlock": true }],
    // 强制使用一致的单引号
    "quotes": ["error", "single"],
    // 最后一行
    "eol-last": 1,
    // 强制在 JSX 属性中一致地使用双引号或单引号
    "jsx-quotes": ["error", "prefer-single"],
    // 未重新赋值的变量使用 const 而不是 let
    "prefer-const": "warn"
  }
}

使用 TypeScript 的项目,如若配置完 ESLint,对于不规范的代码编译器没有正常给出提示。有可能是 ESLint 跳过了对 ts 文件的检查,可以对全局 settings.json 文件加上如下配置:

"eslint.validate": [
  "javascript",
  "javascriptreact",
  "html",
  "typescriptreact"
]

此时,尝试编写一些不规范的代码,可以看到编译器是会正常给出提示信息的:

当然,我们也可以在 package.json 文件中的 scripts 配置项新增一条 lint 命令,用命令来检查所有不规范的代码:

再在终端运行 npm run lint 命令,终端中也会给出相应的报错信息,以及报错信息所在的文件:

保存时自动修复 ESLint 错误

至此我们的编译器已经非常智能了。虽然编译器能自动识别不规范的代码,并给出提示。但是对于某些不规范的代码,仅仅只是因为多了或者少了一个分号、缩进不规范、单双引号使用不规范等等,编译器就要强制我们手动改正。这样还是对开发者不太友好。

能不能想个办法,让这些很明显的错误,可以一键自动修复呢?

答案是可以的。

  • 首先需要下载 ESLint 插件。

  • 下载完成之后,再在全局的 settings.json 文件中加入如下配置:
"editor.codeActionsOnSave": {
  "source.fixAll.eslint": true
},

在刚刚不规范的文件中,按 Command+S 保存一下,发现一些格式错误确实被自动修复了。

至此,ESLint 一键修复错误就完成了。

提示:如果没有生效,可以重新打开窗口试试(>reload window)。

Git Hooks

提交时自动校验

因为提交代码是随意的,我们并没有给它设置校验,所以很有可能一不小心就会把不符合规范甚至有错误的代码提交至远程仓库。

为了让项目的代码符合规范,每次将代码提交至远程仓库前,都需要手动执行 npm run lint 来确保代码是符合规范的,这样还是不够智能。所以有了下面两种工具,在提交代码前,会自动执行一些命令,来帮我们校验代码。这就是 git hooks

  • husky

husky 属于 git hooks 工具,可配置让其在 git 的不同生命周期,执行不同的命令,来约束我们的开发。

1.首先安装 husky

$ npm i -D husky

2.安装 git hooks

$ npx husky install

安装完成之后项目根目录下面会多出一个 .husky 文件,用来存放后续我们添加的 git hooks

3.如果想让别人安装我们的项目依赖后,自动启用 git hooks,可以在 package.json 添加 prepare 命令:

preparenpm 操作生命周期中的一环,在执行 install 的时候会按生命周期顺序执行相应钩子。

npm7 生命周期钩子: preinstall -> install -> postinstall -> prepublish -> preprepare -> prepare -> postprepare

4.添加 pre-commit 钩子。

$ npx husky add .husky/pre-commit "npx lint-staged"

这里的 npx lint-staged 为校验文件的命令,会在提交代码之前自动执行,可自行修改命令。

5.添加 commit-msg 钩子。commit-msg 钩子用来规范提交代码时的提交信息,具体的 commit-msg 规范可以参考这里。

$ npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"' 

6.添加完 commit-msg 钩子之后,还需要安装 commitlint 依赖。因为在执行 commit-msg 钩子时,使用到了 commitlint 来规范提交信息。

$ npm i @commitlint/cli @commitlint/config-conventional -D
7.最后,配置 commitlint.config.js 文件。新建一个 commitlint.config.js 文件并加入以下内容:
module.exports = {
  extends: ['@commitlint/config-conventional']
};

如果新建的文件提示 import/no-commonjs 报错,禁用 CommonJS 语法。可以禁用该 ESLint 规则。

这个时候来提交一下代码吧,看看效果如何。这里没有遵循 commit message 规范,缺乏 git commit 的类别。

可以发现编译器提示提交信息缺乏类型,没有提交成功。

再用规范的 commit message 提交一次,可以提交成功了

  • lint-staged

能够检查本地代码的改动,只校验改动过的文件,大大提高校验的效率。

1.需要先安装 lint-staged
$ npm i -D lint-staged

2.在 package.json 文件中配置需要校验的文件及命令:
 
"lint-staged": {
  "*.(js|ts|jsx|tsx)": "eslint --cache"
}

配置完成之后,在我们提交代码之前,就会自动执行 pre-commit hook 中的 npx lint-staged 命令。如果我们我们的代码不符合 ESLint 规范,代码就不会提交成功。

注意:node 的版本不要太低,否则在运行 npx lint-staged 的时候会报错。


 若有收获,就点个赞吧

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

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

相关文章

web渗透

首先这道题目与ctf还是有点关系的,首先看一下题目: 通过浏览器访问http://靶机服务器IP/1,对该页面进行渗透测试, 找到flag格式:flag{Xxxx123},括号中的内容作为flag值并提交;&…

关于深度学习训练的工程技巧

前置基础 不同精度数据类型的动态范围 FP16的动态范围(6x10-8 ~ 65504) FP32的动态范围(1.4x10-45 ~ 1.7x1038) 可以看出Fp32的动态范围远大于fp16; 其中BF16的取值范围: BF16(BFloat16)的取值范围也是按照IEEE 754标准定义的,…

破解时间序列:移动平均法的综合指南

目录 前言一、时间序列介绍1-1、时间序列定义1-2、时间序列特性1-3、时间序列作用 二、统计学方法2-1、移动平均法介绍2-1-1、基本原理、计算过程2-1-2、移动平均法分类2-1-3、简单移动平均法2-1-4、加权移动平均法2-1-5、指数移动平均法(Exponential Moving Averag…

C# 反射(Reflection)总结

目录 什么是反射? 为什么使用反射? 反射机制的优缺点 如何使用反射? 一,Type访问元数据 获取/修改类中公有成员(属性PropertyI和字段Field等) 调用类中的公有构造函数Constructor 调用类中的公有方…

【软件工程】软件工程期末考试复习题

填空题(每空1分,共25分) 软件生存周期一般可以划分为,问题定义、可行性研究、需求分析、设计、编码、测试和运行和维护。基于软件的功能划分,软件可以划分成___系统软件_、支撑软件、应用软件__三种。可行性研究&…

【UE 从零开始制作坦克】10-炮弹溅射伤害

目录 一、解决炮弹穿过坦克炮塔问题 二、炮弹溅射伤害 效果 一、解决炮弹穿过坦克炮塔问题 打开“PHYS_West_Tank_M1A1Abrams”这个物理资产 造成这种现象的原因是,炮弹只会与如下紫色区域产生碰撞事件 选中坦克炮塔的骨骼 添加盒体外形 缩放盒体外形使其包裹住…

数据库原理之数据库事物

文章目录 一、事物介绍1.1 事物的目的是保证数据的一致性1.2 事物的ACID A、I、D是为了实现 C1.3 什么是本地事物(Local Transactions) 二、数据库系统如何实现ACID2.1 影响深远的ARIES理论2.2 本地事物如何实现原子性和持久性 A、D2.2.1 实现原子性和持久性的Commit Logging方…

基于高精度三维机器视觉的汽车曲轴无序抓取系统应用

Part.1 行业背景 汽车产业的高速发展,对零部件自动化生产提出了更高要求。随着汽车销量的水涨船高,传统的手工生产模式已经难以满足大批量生产的需求,自动化生产是必然趋势。 曲轴是汽车发动机的关键组件之一,生产过程复杂&#…

【MySQL】如何速通MySQL(4)

📌前言:本篇博客介绍如何速通MySQL的第四篇,主要介绍Mysql中主要的基础的入门,学习MySQL之前要先安装好MySQL,如果还没有安装的小伙伴可以看看博主前面的博客,里面有详细的安装教程。或者看一下下面这个链接…

Linux(centos )防火墙常见操作

1、查看防火墙当前状态 systemctl status firewalld 2、开启防火墙 systemctl start firewalld 3、关闭防火墙 systemctl stop firewalld.service 4、如果报错:-bash: firewall-cmd: command not found,可能是没有安装 firewall。安装命令&#xff1a…

处理错误 Xcode 编译找不到文件 libarclite_iphonesimulator.a

处理错误 Xcode 编译找不到文件 libarclite_iphonesimulator.a 视频 https://youtu.be/ZBMFs2PwkB4 错误描述 Error (Xcode): File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.aEr…

双非硕士-美国联培-马普所博士后-985系主任的逆袭之路

本科和硕士都是双非学校,博士期间曾有美国联合培养经历,毕业后到德国马普所从事博士后研究。现任985高校特聘教授、博/硕士生导师,系主任。知识人网小编特刊介绍李志明博士的逆袭之路。 随着国内就业压力的增大,高校招聘教师也呈现…

element 设置 table中的按钮权限

子组件 <template><!-- 二次封装表格&#xff0c; 仅支持单选 :style"{ height: height }"--><div class"self_table"><el-table:data"tableData"style"width: 100%"v-loading"loading"stripeselecti…

[游戏开发]Unity随机网格中空位置_二叉树

[目录] 0. 前言1. 简单随机2. 可用位置内随机3. 二叉树权重随机&#xff08;1&#xff09;分区域随机&#xff08;2&#xff09;设置权重均衡概率&#xff08;3&#xff09;二叉树缓存权重&#xff08;4&#xff09;利用二叉树随机&#xff08;5&#xff09;优缺点 4. 测试对比…

简要介绍 | Backbone与Baseline的区别

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对Backbone和Baseline进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 Backbone与Baseline的区别&#xff1a;从神经网络到性能基准 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来…

大厂测试员是如何编写测试用例呢?

一、测试用例是软件测试的核心 软件测试的重要性是毋庸置疑的。但如何以最少的人力、资源投入&#xff0c;在最短的时间内完成测试&#xff0c;发现软件系统的缺陷&#xff0c;保证软件的优良品质&#xff0c;则是软件公司探索和追求的目标。每个软件产品或软件开发项目都需要…

【活动总结】0617COC深圳社区首场线下AI技术沙龙活动最强总结

文章目录 活动的发起活动的宣传活动的进行活动的收尾活动的总结活动的致谢更多展望友情链接 就在2023年6月17日&#xff0c;CSDN COC 深圳城市开发者社区&#xff0c;在深圳大学组织了一次以【智能未来 —— 人工智能与城乡规划的交叉对话】为主题的线下沙龙活动&#xff0c;活…

基于spring boot的JsonSerializer 业务内容国际化

说起国际化&#xff0c;真的是老生常谈了。后端有各种i18n的依赖组件&#xff0c;springboot本身也支持i18n的设置&#xff0c;前端vue也有i18n的设置&#xff0c;这些常规操作就不提了&#xff0c;大家可以去搜索其他博客&#xff0c;写的都很详细。 本篇博客主要写的是业务内…

5大技巧,实现视频号预约直播人数暴涨!

两个体量相当的视频号&#xff0c;为什么别人的直播间人数过万&#xff0c;而自己的直播间却寥寥无几&#xff1f;这其中有一个非常重要的原因&#xff0c;就是预约直播的工作没有做好。 通常情况下&#xff0c;视频号直播预约人数和最终场观呈现1:10的比例&#xff0c;换言之…

聊聊Redis中的跳跃表

Redis 大家项目中应该都用过&#xff0c;哪怕没有分布式锁、幂等校验的一些逻辑使用场景&#xff0c;缓存数据这个大家肯定都用过吧&#xff1f;最简单的key-value格式&#xff0c;直接存储String类型。 当然&#xff0c;针对越来越复杂的业务场景&#xff0c;后续也可能用到li…