【前端】1 小时实现 React 简历项目

近期更新完毕。仅包括核心代码

目录结构

yarn.lock保证开发者每次能下载到同版本依赖,一般不需要特别留意
package.json 是 Node.js 项目、前端项目、npm/yarn的配置文件。
Dockerfile 是用来 定义 Docker 镜像构建过程的文本文件。它是一份脚本,告诉 Docker 如何一步步搭建你的应用环境。包括基础镜像、安装依赖、复制代码、运行命令等操作。最终由 Docker 根据 Dockerfile 自动构建出一个镜像。
.editorconfig 是一个用于 统一和规范不同开发者编辑器(IDE)中的代码格式设置的配置文件。

- config
- public
- scripts- build.js # 生产环境构建脚本- start.js # 本地开发服务器的脚本- test.js # 测试运行脚本
- src
- templatesdefault.md #放置默认模版
  • 构建工具 webpack/vite 特点是引入.ts/tsx文件的地址可以省略类型扩展名
  • .ts :标准TypeScript文件,用于编写纯TypeScript逻辑代码,不包含JSX语法。
  • .tsx :TypeScript JSX文件,专门用于编写React组件,支持JSX语法(如 <div>...</div> )。

代码解析

//templates/default.md
::: header:::: title::::: left
xxxxx
:::::::::: right
xxxxx
::::::::::::: title::::: left:::::::::: right:::::::::::: 

scripts文件夹

  1. build.js - 生产环境构建脚本
  • 主要功能 :将源代码编译打包为生产环境可用的静态文件
  • 核心流程 :
    • 设置环境变量为 production
    • 清空并准备构建目录
    • 复制public文件夹资源
    • 使用Webpack执行生产环境构建
    • 输出构建文件大小统计和部署指南
    • 处理构建过程中的错误和警告
  • 关键依赖 :Webpack、React Dev Utils、文件系统工具(fs-extra)
  • 触发方式 :通过 npm run build 或 yarn build 命令执行
  1. start.js - 开发服务器脚本
  • 主要功能 :启动本地开发服务器,支持热重载和实时预览
  • 核心流程 :
    • 设置环境变量为 development
    • 检查必要文件是否存在
    • 确定可用端口(默认3000)
    • 配置并启动Webpack开发服务器
    • 设置代理和热更新功能
    • 自动打开浏览器访问开发地址
  • 关键特性 :
    • 支持端口自动检测和冲突处理
    • 集成错误和警告实时通知
    • 提供开发环境专属优化
  • 触发方式 :通过 npm start 或 yarn start 命令执行
  1. test.js - 测试运行脚本
  • 主要功能 :配置并启动Jest测试运行器
  • 核心流程 :
    • 设置测试环境变量
    • 检测版本控制系统(Git/Mercurial)
    • 根据环境自动配置测试模式:
      • CI环境:默认运行所有测试
      • 本地环境:默认启动监视模式
  • 关键特性 :
    • 智能检测版本控制环境
    • 支持Jest命令行参数传递
    • 集成错误捕获机制
  • 触发方式 :通过 npm test 或 yarn test 命令执行

config文件夹

public文件夹

favicon.ico网页图标
robot.txt放在网站根目录下的纯文本文件,用来告诉搜索引擎爬虫(如 Googlebot、Bingbot 等):哪些页面或路径允许抓取,哪些不允许抓取。

  • manifest.json:控制 Web App 即PWA 外观和安装行为等配置 或者 对浏览器扩展插件的配置
{"short_name": "简历","name": "Markdown在线简历,简单、急速、丰富的模板。","icons": [{"src": "favicon.ico","sizes": "64x64 32x32 24x24 16x16","type": "image/x-icon"}],"start_url": ".","display": "standalone","theme_color": "#000000","background_color": "#ffffff"
}
  • index.html 整个应用的入口 HTML 文件,作用:
    作为网页的骨架和载体
    浏览器打开时,加载的第一个 HTML 文件。
    挂载前端框架的根节点
    比如 React、Vue 等单页应用(SPA)会在 index.html 里指定一个容器(如 <div id="app"></div>),JS 会把整个应用渲染到这个容器里。
    配置网页基本信息
    包含 <title>、<meta> 标签、引入 favicon、字体、外部脚本或样式表等。
    作为开发服务器和生产构建的模板
    构建工具会把打包后的 JS、CSS 文件自动注入到这里,最终生成浏览器能执行的页面。
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><link rel="icon" href="%PUBLIC_URL%/favicon.ico" /><meta name="viewport" content="width=device-width, initial-scale=1" /><meta name="theme-color" content="#000000" /><!-- 设置主题颜色 --><meta name="keywords" content="Markdown简历,简历模板,简历模板中心,简历制作软件,免费简历制作,个人简历制作"><metaname="description"content="Markdown在线简历,简单、急速、丰富的模板。"/><!-- SEO优化 --><!-- <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /> --><!--manifest.json provides metadata used when your web app is installed on auser's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/--><!-- <link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> --><!--Notice the use of %PUBLIC_URL% in the tags above.It will be replaced with the URL of the `public` folder during the build.Only files inside the `public` folder can be referenced from the HTML.Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" willwork correctly both with client-side routing and a non-root public URL.Learn how to configure a non-root public URL by running `npm run build`.--><title>简历</title><link href="https://cdn.bootcdn.net/ajax/libs/antd/4.14.1/antd.min.css" rel="stylesheet"><link href="/themes/reset.css" rel="stylesheet"><!-- Global site tag (gtag.js) - Google Analytics --></head><body><noscript>You need to enable JavaScript to run this app.</noscript><!-- 禁用JS的替代显示 --><div id="root"></div><!--This HTML file is a template.If you open it directly in the browser, you will see an empty page.You can add webfonts, meta tags, or analytics to this file.The build step will place the bundled scripts into the <body> tag.To begin the development, run `npm start` or `yarn start`.To create a production bundle, use `npm run build` or `yarn build`.--><script src="https://at.alicdn.com/t/font_2410217_qz6rpfck71.js"></script><script async src="https://www.googletagmanager.com/gtag/js?id=G-5X7ZZVD7WS"></script><!-- google用户访问等数据跟踪分析 --><script>// 初始化配置数据分析功能window.dataLayer = window.dataLayer || [];// 创建/复用全局数据层数组 存储传递分析数据function gtag(){dataLayer.push(arguments);}// 定义全局跟踪函数gtaggtag('js', new Date());// 记录JS加载时间戳gtag('config', 'G-5X7ZZVD7WS');// 使用测量ID G-5X7ZZVD7WS 初始化GA4配置,开始收集基础访问数据</script></body>
</html>
  • data文件夹下有template.json 设置各个主题,后续Square.tsx会用到

themes文件夹

  • 定义各个主题的.less,根据同目录下generate.js将.less编译为.css,在npm run build时自动执行
  • common文件夹下global.less放公共样式
//generate.js
const fs = require('fs');
const path = require('path');const fileList = fs.readdirSync(path.join(__dirname, './'));//读取当前目录下所有文件
//json是accumulator item是它的初始值
const contentJSON = fileList.filter(item => item.indexOf('.css') > -1).reduce((json, item) => {const itemPath = path.join(__dirname, item);//拼接完整路径const name = path.basename(item, '.css');//只取文件名 去掉.cssconsole.log(json, name, itemPath);json[name] = fs.readFileSync(itemPath).toString();//读取内容放入json对应位置return json;
}, {})fs.writeFileSync(path.join(__dirname, 'theme.js'), `module.exports = ${JSON.stringify(contentJSON)}`);
//生成theme.js//theme.js 很粗暴由generate.js导出.css文件

src文件夹

  • reportWebVitals.ts 用于测量和报告前端性能指标的工具文件,放在src/index.tsx中
import { ReportHandler } from 'web-vitals';
const reportWebVitals = (onPerfEntry?: ReportHandler) => {if (onPerfEntry && onPerfEntry instanceof Function) {import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {getCLS(onPerfEntry);//(Cumulative Layout Shift):累积布局偏移量getFID(onPerfEntry);//(First Input Delay):首次输入延迟getFCP(onPerfEntry);//(First Contentful Paint):首次内容绘制getLCP(onPerfEntry);//(Largest Contentful Paint):最大内容绘制getTTFB(onPerfEntry);//(Time to First Byte)});}
};
export default reportWebVitals;
  • react-app-env.d.ts 是 TypeScript 环境声明文件,主要作用是为 React 应用提供 类型定义和环境配置 ,确保 TypeScript 编译器能够正确识别项目中的非代码文件和环境变量。一般是自动生成的。

utils

  • window-event.ts
    App.tsx中引入它,设置window.onload/onresize事件
window.onload = () => {window.onresize = () => {const windowWidth = document.body.clientWidth;const el = document.querySelector('.rs-view-inner') as HTMLElement;
/*
TypeScript 中的 DOM 元素选择与类型断言语句,主要作用是 获取页面中特定 CSS 类的元素并明确其类型 。
*/if (!el) {return;}if (windowWidth < 1250 && windowWidth > 1000) {const resetWidth = windowWidth - 450;const marginWidth = resetWidth * 0.2;const radio = Math.round(resetWidth * 0.8 / 794 * 100);el.style.transform = `scale(${radio/100})`;el.style.marginLeft = `${marginWidth / 2}px`;} else if (windowWidth >= 1250) {el.style.transform = `scale(1)`;el.style.marginLeft = `auto`;}}
}
export { };

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

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

相关文章

python中的pydantic是什么?

Pydantic 是 Python 中一个用于数据验证和设置管理的库&#xff0c;主要通过 Python 类型注解&#xff08;Type Hints&#xff09;来定义数据结构&#xff0c;并自动验证输入数据的合法性。它广泛应用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理、数据序列化等场…

腾讯云市场目前饱和度

首先我需要理解市场饱和度的概念。市场饱和度通常指一个产品或服务在潜在市场中的渗透程度&#xff0c;高饱和度意味着市场增长空间有限&#xff0c;低饱和度则表明还有较大发展潜力。 从搜索结果看&#xff0c;腾讯云目前在中国云服务市场排名第三&#xff0c;市场份额约为15%…

EDR、NDR、XDR工作原理和架构及区别

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; EDR、NDR、XDR是网络安全中关键的检测与响应技术&#xff0c;它们在覆盖范围、数据源和响应机制上有显著差异。以下是它们的工作原理和架构详解&#xff1a; --- ### &#x1f50d; 一、EDR&#xff0…

vue3 + luckysheet 实现在线编辑Excel

效果图奉上&#xff1a; 引入的依赖&#xff1a; "dependencies": {"types/jquery": "^3.5.32","types/xlsx": "^0.0.36","jquery": "^3.7.1","xlsx": "^0.18.5",}在index.html中…

Linux下MinIO分布式安装部署

文章目录 一、MinIO简单说明二、MinIO分布式安装部署1、关闭SELINUX2、开启防火墙2.1、关闭firewall&#xff1a;2.2、安装iptables防火墙 3、安装MinIO4、添加MinIO集群控制脚本4.1添加启动脚本4.2添加关闭脚本 5、MinIO控制台使用 一、MinIO简单说明 1、MinIO是一个轻量的对…

Codeforces Round 980 (Div. 2)

ABC 略 D 这个过程一定是由1向后跳的过程中穿插有几次向前一步一步走。直到跳到一个位置后再把前面所有没有走过的位置倒序走一遍。总分就等于最大位置的前缀和-前面所有起跳位置和。前缀和固定我们只需要求到每个位置的最小起跳和即可。对于这个向后跳和向前走的过程我们可以…

Langchain实现rag功能

RAG&#xff08;检索增强生成&#xff09;的核心是通过外部知识库增强大模型回答的准确性和针对性&#xff0c;其工作流程与优化策略如下&#xff1a; 一、RAG 核心流程 ‌知识库构建‌ ‌文档加载与分割‌&#xff1a;将非结构化文档&#xff08;PDF、Markdown等&#xff09;…

算法笔记上机训练实战指南刷题

算法笔记上机训练实战指南刷题记录 文章目录 算法笔记上机训练实战指南刷题记录模拟B1001 害死人不偿命的(3n1)猜想B1011 AB 和 CB1016 部分ABB1026 程序运行时间B1046划拳B1008数组元素循环右移问题B1012 数字分类B1018 锤子剪刀布A1042 Shuffling Machine 每天两题&#xff0…

MYSQL基础内容

一、介绍 1.不用数据库&#xff1a;使用IO流对数据进行管理 2.使用数据库&#xff1a;使用SQL语句对开发的数据进行管理&#xff0c;能储存上亿条数据 3.MYSQL&#xff1a; 是流行的关系型数据库管理系统之一&#xff0c;将数据保存在不同的数据表中&#xff0c;通过表与表之…

音视频会议服务搭建(设计方案)-01

前言 最近在做音视频会议系统服务搭建的工作任务&#xff0c;因为内容过多&#xff0c;我会逐篇分享相关的设计方案、开发思路、编程语言、使用的组件集合等等。如果你也有大型音视频会议系统搭建架构的需求&#xff0c;希望这些可以对你有所帮助。 EchoMeet 音视频会议系统架构…

刷leetcode hot100/准备机试--图

图的基础知识【这部分建议使用acm模式】 图论理论基础 | 代码随想录 存储&#xff1a; 一般有邻接表【适合稀疏图】【数组 链表 】和邻接矩阵【适合稠密图】存储方式 注意邻接表 和 邻接矩阵的写法都要掌握&#xff01; 邻接矩阵 n个节点&#xff0c;申请n*n或者&#xf…

无代码自动化测试工具介绍

无代码自动化测试工具允许用户无需编写代码即可创建和运行测试,通过拖拽式界面或录制回放等可视化界面进行操作。 这些工具利用图形用户界面和预定义命令来创建测试,使非编程人员也能进行自动化测试。 无代码自动化测试工具使团队能够: 使用直观的拖拽界面开发和执行自动化…

python学习打卡day58

DAY 58 经典时序预测模型2 知识点回顾&#xff1a; 时序建模的流程时序任务经典单变量数据集ARIMA&#xff08;p&#xff0c;d&#xff0c;q&#xff09;模型实战SARIMA摘要图的理解处理不平稳的2种差分 n阶差分---处理趋势季节性差分---处理季节性 建立一个ARIMA模型&#xf…

分布式锁的实现方式:使用 Redisson 实现分布式锁( Spring Boot )

Redisson提供了分布式和可扩展的Java数据结构&#xff0c;包括分布式锁的实现。 1. 添加依赖 在pom.xml中添加Redisson依赖&#xff1a; <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId>…

Web基础关键_004_CSS(二)

目 录 一、样式 1.行内样式 2.内部样式 3.外部样式 二、选择器优先级 1.非关系选择器 2.关系选择器 三、属性 四、盒子模型 五、元素 1.块级元素 2.行内元素 3.行内块级元素 4.元素类型转换 六、浮动 七、定位 1.静态定位 2.相对定位 3.绝对定位 4.固定定位 …

数据使用权与所有权分离:能否诞生“数据租赁”市场

——首席数据官高鹏律师数字经济团队创作&#xff0c;AI辅助 数据如矿藏&#xff0c;开采需“契约” 想象一座蕴藏着无尽资源的数字矿山&#xff1a;企业或个人拥有数据的“所有权”&#xff0c;如同手握矿脉的产权&#xff0c;但若无法高效挖掘其价值&#xff0c;矿石终将沉…

【esp32s3】2 - 第一个组件

下面的内容编写时间跨度有点大&#xff0c;乱了得一团&#xff0c;也没ai整理。食之无味&#xff0c;弃之可惜。 推荐笔记&#xff1a;ESP32 之 ESP-IDF 教学&#xff08;十八&#xff09;—— 组件配置&#xff08;KConfig&#xff09; 推荐笔记&#xff1a;Kconfig 拓展 乐鑫…

【Java_EE】单例模式、阻塞队列、线程池、定时器

目录 单例模式 饿汉模式<代码> 懒汉模式<代码> 阻塞队列 阻塞队列概念 阻塞队列解决的问题 阻塞队列工作原理 阻塞队列的优/缺点 优点 缺点 模拟实现阻塞队列<代码> 线程池 线程池概念 线程池解决的问题 线程池参数 四种拒绝策略 线程池工作…

Redis初识第七期---ZSet的命令和应用场景

ZSet相较于Set来说&#xff0c;它又是有序的&#xff0c;这个有序指的就是我们通常意义上的有序了&#xff0c;ZSet内部中是按照升序来排序的。 排序规则&#xff1a;ZSet相较于Set来说&#xff0c;它内部引入了一个新的属性&#xff1a;分数&#xff08;Score&#xff09;&am…

Wps开放平台v5升级v7上传实体文件踩坑(Java使用restTemplate)

背景&#xff1a; 最近接到一个老项目需求&#xff0c;之前开发的WPS开放平台文件&#xff08;商密集成&#xff09;预览功能因为升级需要重新对接api&#xff0c;新的上传文件接口踩坑特意记录一下。 这里出问题的是第二步&#xff0c;请求文件上传信息 踩坑代码 调用后403 p…