如何快速从零开始搭建一个前端项目

news2024/10/2 10:32:37

2022 年了,如何快速从零开始搭建一个合适的前端项目?

准备工作

首先本地需要安装好 node 环境以及包管理工具,推荐直接使用 pnpm,也可以通过 pnpm 来直接管理 nodejs 版本。

pnpm 安装:

# Mac or Linux
curl -fsSL https://get.pnpm.io/install.sh | sh -

# Windows
iwr https://get.pnpm.io/install.ps1 -useb | iex 

使用 pnpm 安装 nodejs 的 LTS 版本:

pnpm env use --global lts 

项目搭建

这里我们以搭建一个 React + TypeScript 项目为例

脚手架

脚手架方面,新项目可以考虑直接使用 vite,我们通过以下命令创建一个基于 vite 的初始化项目:

pnpm create vite my-react-app --template react-ts 

进入目录可以看到如下的结构:

.
├── public
├── src
├── index.html
├── package.json
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts 

ESLint

ESLint 可以通过静态分析,来审查你代码中的错误,对于前端项目也是不可或缺的存在,这里我们选择社区比较流行的 airbnb 风格的 ESLint 规则,通过以下命令安装基础的配置与插件:

pnpm add eslint eslint-config-airbnb-base eslint-plugin-import -D 

然后在项目根目录中添加 .eslintrc.json 文件:

{"extends": ["eslint:recommended","airbnb-base",],"plugins": ["import"],
} 

支持 TS 和 React

对于 TypeScript 以及 React 项目,还需要额外的 parserplugin 来支持:

# TypeScirpt eslint parser
pnpm add @typescript-eslint/parser @typescript-eslint/eslint-plugin -D

# React eslint plugin
pnpm add eslint-plugin-react eslint-plugin-react-hooks -D 

.eslintrc.json 文件中添加相应的规则:

{ "extends": ["eslint:recommended","airbnb-base","plugin:react/recommended","plugin:react/jsx-runtime","plugin:react-hooks/recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended"],"plugins": ["import","@typescript-eslint","react",],"parser": "@typescript-eslint/parser",
} 

最后在 package.json 中添加对应的 scripts 就大功告成了:

{"scripts": { "lint": "eslint --fix --quiet --ext .ts,.tsx src"}
} 

prettier

prettier 是一个代码格式化工具,可以通过它来实现代码缩进、空行等排版风格的统一,通过以下命令进行安装:

pnpm add prettier -D 

然后在根目录中添加 .prettierrc.json 配置文件:

{"printWidth": 80,"tabWidth": 2,"semi": true,"singleQuote": true
} 

结合 ESLint 使用

我们可以通过 prettierESLint 插件来实现检查 ESLint 规则时也同步检查 prettier 代码风格的规则:

pnpm add eslint-plugin-prettier eslint-config-prettier -D 

安装后在 .eslintrc.json 中添加相应配置,注意需要设置 prettier/prettier 相关规则为 error

{"extends": ["eslint:recommended","airbnb-base","plugin:react/recommended","plugin:react/jsx-runtime","plugin:react-hooks/recommended","plugin:@typescript-eslint/eslint-recommended","plugin:@typescript-eslint/recommended","prettier"],"plugins": ["import","@typescript-eslint","react","prettier"],"parser": "@typescript-eslint/parser","rules": {"prettier/prettier": "error",}
} 

husky + lint-staged

配置好 ESLintprettier 之后,你需要一个工作流来触发 lint 的相关检查,这里我们选择比较常用的 husky + lint-staged 的组合:

pnpm add husky lint-staged -D 

在根目录的 package.json 中添加对应的配置:

{"lint-staged": {"**/*.{ts,tsx}": ["eslint --fix --quiet","prettier --write","git add"]}
} 

它会在匹配到 .ts/.tsx 后缀的文件时去执行 ESLintprettier 的修复工作。

你还需要在 .husky 中添加 precommit 文件来触发 lint-staged 的这个行为:

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

npx lint-staged 

最后在 package.jsonscripts 中添加 husky 的初始化脚本,来保证上述钩子能够正常触发:

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

顺利的话,通过以上配置,你在每次进行 commit 之后都会由 husky 触发 precommit 钩子并由 lint-staged 来匹配文件规则,执行相应的 lint 检查与修复。

vitest

单元测试是项目开发中比较重要的一部分,通过单元测试可以一定程度上保障项目的代码质量以及逻辑的完整性,对于 vite 创建的项目,我们选择与之匹配度比较高的测试框架 vitest 来编写测试用例,安装如下:

pnpm create vitest jsdom -D 

vite.config.ts 中配置 vitest,选择 js-dom 环境,这里在顶部添加 vitest 的类型声明引入后,即可在 vitest 中共享 viteplugins 等配置,无需配置 vitest.config.ts 文件:

/// <reference types="vitest" />
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({plugins: [react()],test: {testTimeout: 20000,environment: 'jsdom',},
}); 

一个使用 @testing-library/react 编写的测试用例的简单例子可以参考:react-typescript

github workflow

CI 则是项目自动化中比较重要的一环,通过 CI 可以帮助你自动执行一些任务,我们以 github 为例,这里配置一个 CI 相关的 workflow, 它的主要功能是在你 push/pull_request 代码到 github 时,自动执行相关的 ESLint 检查、TypeScript 类型检查以及对测试用例的执行。

首先我们在根目录新建 .github/workflows 文件夹,然后创建一个 ci.yml 文件,主要内容为:

name: CI
on:push:branches:- mainpull_request:branches:- main
jobs:lint:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Set node v14uses: actions/setup-node@v3with:node-version: '14'- name: Installrun: npm install- name: Lintrun: npm run linttypecheck:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Set node v14uses: actions/setup-node@v3with:node-version: '14'- name: Installrun: npm install- name: Typecheckrun: npm run typechecktest:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: Set node v14uses: actions/setup-node@v3with:node-version: '14'- name: Installrun: npm install- name: Buildrun: npm run test 

这里我们创建了三个 job:lint/typecheck/test,它们在触发了 push/pull_request 操作后会分别自动执行 scripts 中的 lint/typecheck/test 命令,其中 typecheck 前面没有写,主要内容其实就是 tsc

如何快速搭建

对于现在的前端项目而言,上述 TypeScript 以及 eslintprettierhusky 等基本上属于标配了,但每次创建一个新项目都需要重新进行这样的一系列配置也比较耗费时间,因此我开发了一个小项目,可以帮助你快速创建一个配置好以上内容的项目,只需要一行代码:

pnpm create @tooltik/cap my-cap-app --template react-ts 
  • 项目地址:cap,欢迎试用、提 issue 和 PR

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

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

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

相关文章

SpringMVC 环境配置

文章目录引入1、MVC的概念2、Spring MVC基本原理一、导入坐标&#xff08;导包&#xff09;导入Spring MVC所需要的jar包二、新建springmvc-config.xml文件三、配置web.xml四、 创建Controller五、配置SpringMVC配置文件六、配置页面其他引入 Spring Web MVC是一种基于Java的实…

cv算法工程师学习教程

前言一&#xff0c;计算机系统 1.1&#xff0c;计算机系统书籍1.2&#xff0c;设计模式教程 二&#xff0c;编程语言 2.1&#xff0c;C 学习资料2.2&#xff0c;Python 学习资料 三&#xff0c;数据结构与算法 3.1&#xff0c;数据结构与算法课程3.2&#xff0c;算法题解 四&am…

数字信号处理及python实现(三)

数字信号处理及python实现三抽样引起的混叠抽样的频域视图样本重建信号拟合正弦波线性与多项式内插理想低通滤波器这是参考知乎的数字信号处理及matlab实现的python实现版本&#xff0c;参考连接 上一期:数字信号处理及python实现(二) 项目文件结构 test为测试文件&#xff…

【Vue】Vue开发实战之我的笔记(ch18-ch27)--20221115

参考https://blog.csdn.net/yfm120750310/article/details/111353963 18 | 为什么需要Vuex 18.1 为什么需要Vuex provide和inject虽然能够实现层层传递的数据管理&#xff0c;但对于一个大的管理系统而言会显得有些繁琐&#xff0c;我们需要一个大型的状态管理系统。 Vuex不…

甘特图是什么?如何快速搭建?

甘特图是什么&#xff1f; 甘特图是一种条状图&#xff0c;直观展示项目进展随时间的走势及联系。其中&#xff0c;项目时间由横轴表示&#xff0c;项目活动由纵轴表示。整体线条表示整个项目期间内&#xff0c;计划和实际的活动完成情况。甘特图起初用于美国胡佛水坝和美国洲…

cpe(通用平台枚举)命名规范及python CPE库实战

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

一文看懂Linux 页表、大页与透明大页

一、 内存映射与页表 1. 内存映射 我们通常所说的内存容量&#xff0c;指的是物理内存&#xff0c;只有内核才可以直接访问物理内存&#xff0c;进程并不可以。 Linux 内核给每个进程都提供了一个独立的虚拟地址空间&#xff0c;并且这个地址空间是连续的。这样&#xff0c;…

如何用Python 快速搭建HTTP服务器

Python具有语法简单、语句清晰的特点,而且Python的兼容性比较好,可以将其他语言制作的模块联结起来,具有强大且丰富的库,封装后可以轻松调用,因此成为编程语言中的“网红“&#xff0c;甚至被称为非计算机从业者的第一语言。 Python在IT就业市场也是最受欢迎、最热门的技术技能…

SpringBoot整合Redis

SpringBoot整合Redis 文章目录SpringBoot整合Redis一 .简介1. redie是什么&#xff1f;2. redie的使用场景&#xff1f;二 . 使用1. 引入依赖2. 配置文件3. 启动redis4. 创建Redis工具类5. 创建测试类6. 查看效果一 .简介 1. redie是什么&#xff1f; Redis是现在最受欢迎的N…

图解计算机的存储器金字塔

本文已收录到 GitHub AndroidFamily&#xff0c;有 Android 进阶知识体系&#xff0c;欢迎 Star。技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 进 Android 面试交流群。 前言 大家好&#xff0c;我是小彭。 在计算机组成原理中的众多概念中&#xff0c;开发者接触得最…

LeetCode-剑指43-1-n整数中出现1的次数

1、逐位统计 我们统计每一位k上面可能出现1的次数&#xff1a;1、对于每一位k上面的出现的1&#xff0c;我们首先统计其出现(n/10k)10k−1(n/10^k)\times10^{k-1}(n/10k)10k−1次的1&#xff1b;2、考虑到存在余数的情况&#xff0c;我们还需要比较剩余余数中出现1的次数&…

浅谈HTTP缓存与CDN缓存的那点事

HTTP缓存与CDN缓存一直是提升web性能的两大利器&#xff0c;合理的缓存配置可以降低带宽成本、减轻服务器压力、提升用户的体验。而不合理的缓存配置会导致资源界面无法及时更新&#xff0c;从而引发一系列的衍生问题。本文将分别将从HTTP缓存与cdn缓存的规则、流程、配置入手&…

XSS挑战之旅1-10关

文章目录前言第1关第2关第3关第4关第5关第6关第7关第8关第9关第10关前言 漏洞介绍&#xff1a;XSS漏洞 参考文章&#xff1a;XSS挑战之旅 游戏规则&#xff1a;触发alert()弹窗&#xff0c;进入下一关 第1关 进入第一关 随便输入一下&#xff0c;观测输出&#xff0c;看源代…

还在为数据库事务一致性检测而苦恼?让Elle帮帮你,以TDSQL为例我们测测 | DB·洞见#7

数据库用户通常依赖隔离级别来确保数据一致性&#xff0c;但很多数据库却并未达到其所表明的级别。主要原因是&#xff1a;一方面&#xff0c;数据库开发者对各个级别的理解有细微差异&#xff1b;另一方面&#xff0c;实现层面没有达到理论上的要求。 用户在使用或开发者在交…

147. SAP UI5 SmartTable 控件的使用介绍

本文来自笔者 SAP 开发技术交流知识星球内一位朋友的提问: smartfilter bar 有个输入框Cost Element绑定了cds实现value help 请问其对应的suggestion功能是通过cds的注解实现的嘛? 要回答这个问题,我们必须首先掌握 SAP UI5 SmartTable 控件的使用方式,然后才能深入探究 …

【Tensorflow】使用Tensorflow自定义模型和训练

Tensorflow的核心与NumPy非常相似&#xff0c;但具有GPU支持&#xff1b;Tensorflow支持分布式计算&#xff08;跨多个设备和服务器&#xff09;。 像NumPy一样使用TensorFlow 运算符是在Python 3.5 中添加的&#xff0c;用于矩阵乘法&#xff0c;等效于 tf.matmul() 函数。…

C++数据结构迷宫哈希表二叉树

C数据结构迷宫哈希表二叉树 《数据结构》应用系统设计——迷宫问题 问题描述:设计算法求出并显示从入口点到出口点可沿八个方向前进的一条通路&#xff0c;或显示没有通路 难度:易 基本要求: (1)键盘(或文件)输入迷宫行数m和列数n&#xff0c;计算机随机生成迷宫(或从文件读入…

robots (攻防世界)

前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 题目描述 进入网址 啥也没有 解题工具: 额...浏览器&#xff1f; (可能还需要百度) 问题解析: 科普时间到 robots协议也称爬虫协议、爬虫规则等, 是指网站建立一个robots.txt文件来告诉搜索引擎哪些…

安卓 手机硬改 工具下载 一键新机 改串 抹机 root隐藏 改串号MEID imei SN信息 工具教程分享

一键新机、模拟机型、一键备份、还原APP数据、ROOT隐藏、修改数据、保护隐私 一键新机 超过3000机型一键模拟、无束缚轻松做注册、激活、留存 安卓/IOS(进行中) 支持目前最流行的机型&#xff0c;安卓全机型兼容&#xff0c;我们坚持领先一步 操作简单 适合脚本作者 群控…

为了验证某些事,我实现了一个toy微前端框架【万字长文,请君一览】

众所周知微前端是企业中前端发展的必经之路。 我司搭建了自己的微前端脚手架工具&#xff0c;它将项目变成了“多页应用”&#xff0c;跳转方式由 location.href 这类api进行。所以笔者之前在想&#xff1a;这种方式跳转能不能有动画效果呢&#xff1f; 在“上层建筑”中进行“…