【山竹记账前端-react】1.搭建前端项目
大纲链接 §
[toc]
1. 山竹记账 React 版项目介绍 ⇧
山竹项目技术栈
- 容器
Dockeroh-my-env2- 本地开发
- 远程部署
- 前端
React@19.3.0 - 后端
Rails@7.2+ - 数据库
PostgreSQL - 云服务器 阿里云/腾讯云
- 购买、配置、域名等
- 一键部署
Bash Script
山竹项目亮点
- 开发模式:前后端分离架构,完成前后端联调
- 前端技术
- 技术栈:React + TypeScript + TSX + UnoCss + Vite
React技术栈最佳实践- 使用 React Router 做路由
- 使用 Zustand 做状态:实现全局状态管理
- 网络处理:
- 使用
SWRA React Hooks library for data fetching - 对 Axios 进行二次封装
- 自研 Axios Mock 模块
- 处理跨域(CORS)问题
- 使用
- 封装 Hooks、通用业务组件
- Vite 工程化
- 代码分割
- 工程化环境配置
- 后端 & 部署相关
- 后端框架:Rails
- 使用 JWT 做身份认证
- 数据库 PostgreSQL
- 部署:Docker 容器化
- Nginx 反向代理
- 部署到云服务器 CDN 加速
- 工程化与文档、开发规范
- 开发模式:后端接口 TDD 测试驱动开发
- 文档:编写需求文档、系统设计文档、后端自动生成接口文档
- 最佳实践:整套项目遵循工程化最佳实践
- 需求简单,但包含的技术流行 最佳实践 最快最小项目实践验证
2. 项目预览 ⇧
功能
- 邮箱验证 登录 退出
- 添加标签
- 记账
- 查看收入 支出
- 统计图表
3. 项目步骤 ⇧
项目实践步骤
- 配置开发环境
- 前端:浏览器、Node.js、VSCode;都是跨平台 兼容性好
- 部署到 GitHub;前端的最简部署流程
- 创建 Snippet
- 引入 React Router
- 页面路由划分
- 引入 CSS Modules 和 UnoCSS
- 完成第一个页面
- 手机端调试
更多步骤
- 封装组件、封装自定义 Hook
- 制作页面
- 使用 JWT
- 引入 Zustand
- 请求库 SWR
- 封装 Axios、封装 Mock
- 前后端联调、处理快鱼
- 性能优化
- 项目总结梳理
代码实践总结
- 每一节
- 小结思路,再敲代码
- 使用提供的初始代码
- 删掉之前自己的代码,防止错误积累
4. 项目架构 ⇧
- 主要面向手机页面
- 记账
- 云同步 登录
- 可视图表
- 用户 ->
Nginx/api/v1/resources->Rails Controller<-Modes<-PostgerSQL- 静态资源
/index.html、/styles-xxx.css、/main-xxx.js-> 前端页面服务地址 - 动态路由
/tags、/records/new
5. 开发环境搭建 ⇧
有两种搭建本项目开发环境的方式:
- 使用 oh-my-env
- 这是一种基于 Docker 的开发环境,你可以通过这种方式得到跟我「完全一样」的开发环境
- 兼容 Windows、macOS、Linux
- 基于新版
Docker - 已内置安装
node、pnpm、npm、zsh(部分已升级至稳定版)
- 自己安装 node 18、VSCode 最新版、Bash 等开发工具
- 这种方式跟你平时的开发方式没有区别,只要求版本跟我的差不多即可
容器内 Linux 查找文件
cd ~/repos- 运行命令
f回车,会搜索当前目录下的所有文件- 继续输入
index.tsx会模糊查找所有匹配的文件 - 按上下选择,按回车确认,就会在
VSCode中打开
- 继续输入
- 运行命令
fd回车,会搜索当前目录下的所有目录文件夹- 输入
main.tsx选择一个回车 - 会在命令行中自动跳转到该目录,并自动缩短显示路径
pwd
- 输入
- 执行成功:显示蓝色的点;执行失败,显示红色的点
- 启动前端服务,自动转发端口到宿主机
6. 使用vite创建项目 ⇧
🛠️ 环境准备
1. 检查 Node.js 版本
请确保你的本地 Node.js 版本符合项目要求:
* 要求版本:>=22.23.2
* 检查命令:node -v
2. 开启官方 Corepack
本项目利用 Node.js 自带的 Corepack 来管理包管理器版本,无需你全局手动安装 pnpm。请在终端执行以下命令开启它:
|
|
开始搭架子
- 用
React实现山竹前端 - 运行
pnpm create vite按脚手架选项选择- 查看
create-vite版本,运行npm info create-vite versions - 或者运行
pnpm create vite@9.2.1 react-mangosteen-1 --template react-ts - 可选
oxlint或eslint - 直接安装依赖即可
pnpm i
- 查看
- 运行命令
code ./react-mangosteen-1使用一个新的窗口打开容器项目 - 锁死版本号
- 去除依赖包版本前缀
^ - 运行
pnpm config set save-prefix=''以后安装的依赖也去除^
- 去除依赖包版本前缀
- 安装
sass运行命令pnpm add -D sass-embedded
微调
package.json
|
|
- 注意
engines字段,限制node版本 - 注意
scripts.preinstall字段,限制包管理器为pnpm - 注意启动项目添加
--host
📦 依赖安装与启动 配置完成后,你可以直接在项目根目录下执行以下命令:
安装依赖、本地开发、本地打包与预览 ⇧
⚠️ 注意:请勿使用
npm install或yarn install。项目中配置了拦截脚本,使用非pnpm命令将会导致安装失败。
|
|
创建两个版本固定文件 ⇧
touch .nvmrc && echo "22.23.2" >> .nvmrctouch .npmrc && echo 'engine-strict=true' >> .npmrc
主要依赖技术栈 ⇧
vite@8.3.1typescript@7.0.2react@19.3.0react-routerzustanduno-csssass(sass-embedded@1.104.1)
7. 每个目录的作用 ⇧
|
|
Vite 项目在 VSCode 中根目录别名配置 @ ⇧
VSCode重要但很少提及的别名配置
- 按
Ctrl + Shift + P搜索settings - 打开用户编辑
settings.json 添加以下字段配置
1 2 3 4{ "js/ts.preferences.importModuleSpecifier": "non-relative", "js/ts.preferences.importModuleSpecifierEnding": "minimal" }或者按
Ctrl + Shift + P董凯配置面板,搜索importModule将如图两项分别设置为
non-relative和minimalPrefers a non-relative import based on the baseUr1 or paths configured in your jsconfig.json tsconfig.json
添加路径别名
@,配置vite.config.ts
|
|
添加路径别名
@,配置tsconfig.app.json
|
|
初始化改造部分文件,清除默认结构 ⇧
重命名
index.css为main.scss清空默认样式
|
|
对应修改引用
main.tsx1 2 3 4 5 6 7 8 9 10 11 12import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' import './main.scss' import { App } from './App.tsx' const div = document.getElementById('root')! const root = createRoot(div) root.render( <StrictMode> <App /> </StrictMode>, )
重命名
src/App.scss清空默认样式
|
|
src/App.tsx清空默认结构代码
|
|
提交初始化代码
8. 使用GitHub Pages部署页面 ⇧
前提
- 已有 GitHub 账号,创建一个仓库:
xxx-preview或者xxx-publish - 在
oh-my-env1容器环境中创建.ssh的密钥对 - 其他略
初始提交命令
|
|
仓库页面
Settings面板
- 搜索
Pages Branch下的选项选择master- 点击
Save
等待
GitHub自动部署完毕
GitHub Pages出现网址 https://xmasuhai.xyz/react-mangosteen-1-preview/- 访问该网站,页面空白,打开控制台查看报错
index-xxx.js报 404 - 访问的资源是
<script type="module" crossorigin="" src="/assets/index-CWcRINx3.js"></script> - 而首页地址为
xxx/react-mangosteen-1-preview/index.html - 正确路径为
/react-mangosteen-1-preview/assets/index-xxx.js - 尝试运行
pnpm run build --base=fyh - 查看
index.html中资源的路径多了前缀/fyh/assets/index-CWcRINx3.js - 可以改为该项目的仓库名,注意前后添加斜杠:
/react-mangosteen-1-preview/- 在
package.json中修改"build": "tsc -b && vite build --base=/react-mangosteen-1-preview/"
- 在
点击
index.html确保当前目录在最外层,创建目录bin/deploy_to_github.sh1 2 3 4 5 6 7 8 9 10 11 12#!/usr/bin/env bash rm -rf dist pnpm build cd dist git init git add . git commit -m 'deploy' git remote add origin git@github.com:xmasuhai/react-mangosteen-1-preview.git git push -f origin master:master cd - echo "https://xmasuhai.xyz/react-mangosteen-1-preview/"运行
sh bin/deploy_to_github.sh添加可执行权限
chmod -x bin/deploy_to_github.sh写入
package.json脚本"deploy": "sh bin/deploy_to_github.sh",之后运行pnpm deploy即可将网址写到仓库的描述中
https://xmasuhai.xyz/react-mangosteen-1-preview/查看网页就消除报错了
正确的配置: ``
9. Snippets 之 typescriptreact.json ⇧
|
|
我的最终版
|
|
10. 使用Snippet加速开发 ⇧
11. 使用ESLint规范你的代码 ⇧
12. 使用Husky规范你的代码提交 ⇧
参考
- Husky enhances your commits and more 🐶 woof!
- 使用 husky 让代码提交优雅规范
- 开发者必看!在团队中我是这样实现 Git 提交规范化的
- Husky 和 Lint-staged 入门指南:Git 提交时自动进行代码校验和格式化
- 【git规范–husky的使用】
参考文章
- 设计稿
- 初始代码:空
- 最终代码:https://github.com/FrankFang/6KQwMfYK
- 提交历史:https://github.com/FrankFang/6KQwMfYK/commits/master
相关文章
- 作者: Joel
- 文章链接:
- 版权声明
- 非自由转载-非商用-非衍生-保持署名