从零开始构建一个现代化前端项目:我的实战经验分享
大家好,我是阿凯,在过去几年里一直在一线做前端开发工作。今天想和大家分享一次我亲身经历的项目,是从头开始搭建一个现代化前端项目的全过程。如果你正准备入行、或者团队需要做一个新项目,我相信这篇文章能给你带来一些实际的参考价值。
事情发生在半年前,我们团队要启动一个全新的B2C产品后台管理系统。当时的情况是:
- 产品经理扔了一个粗略的需求文档过来;
- 后端接口还在设计阶段;
- 没有现成的技术方案;
- 团队成员对技术栈也还没有完全统一。
这听起来是不是很像你正在面对的情况?那我们就来聊聊我是怎么一步步把这个“草台班子”变成一个可扩展、可维护、性能表现还不错的前端系统的。
背景与挑战:如何在混乱中找到方向?

项目初期,最大的问题并不是代码写不出来,而是方向不明确。团队里有人主张用Vue,有人坚持React;有人说直接从Ant Design Vue起步最省事,有人说UI库应该等设计方案定稿后再选。
更糟的是,产品经理每天都在改需求,而且每次都说“就改一点点”。
举个真实的例子:我们在第二周刚搭好Vue3 + Vite的基础环境,PM突然说希望支持深色主题切换,最好还能定制颜色变量。这时候我们才发现,UI库还没选,CSS架构也没定,连主题变量化都没处理,根本谈不上切换模式。
所以,第一个教训就是:没有规划,盲目开搞,最后吃苦的只有开发者自己。
技术选型:为什么我选择了React + Vite + Tailwind CSS?

虽然一开始团队内部有分歧,但我作为前端负责人,最终拍板用了React + Vite 的组合。原因如下:
为什么不是Vue?
其实我对Vue也很熟悉,但这次项目中有一些复杂交互场景(比如拖拽排序、表格状态管理),React + Context + 自定义Hooks的方式更符合我的习惯。另外,我们后端用的是Node.js + TypeScript,为了前后端TypeScript保持一致体验,我选择了React + TS模板。
为什么选择Vite而不是Webpack或Vite旧版本?
说实话,我之前也用过Create React App,但在上一个项目中遇到了冷启动慢、配置繁琐的问题。而这次项目需要频繁迭代、热更新必须快,否则影响效率。
试了下Vite之后彻底换阵营了,真的是又快又方便,尤其是HMR的速度,几乎感受不到延迟。而且Vite现在对TypeScript、JSX、Vue、React的支持都非常成熟。
为什么使用Tailwind CSS?
这也是很多人没想到的选择。因为我们UI设计师给的原型图风格比较简洁,偏向Material风格,但又有个性化需求。如果直接使用Ant Design或Element Plus,后期可能会因为覆盖默认样式费很多劲。
用Tailwind的话,可以快速实现灵活的布局,样式也更可控。虽然学习曲线有点陡,但配合PostCSS和IntelliSense插件后,开发体验大大提升。
架构搭建:基础结构是怎么设计的?


接下来我们来看整个项目的初始化过程,我会以真实目录结构为例,说明各个部分的作用:
src/
├── assets/ // 静态资源
├── components/ // 可复用组件
│ ├── common/ // 通用组件
│ └── pages/ // 页面级组件
├── hooks/ // 自定义React Hooks
├── context/ // 全局状态上下文
├── routes/ // 路由配置文件
├── services/ // 接口封装
├── types/ // 公共类型定义
├── utils/ // 工具函数
├── App.tsx
└── main.tsx
这个结构不是一开始就完整的,而是边开发边优化出来的。比如早期我们只有App.tsx和main.tsx,随着页面增多,才逐步拆分出了路由、服务层和工具函数。
小贴士:一定要尽早把路由和服务层抽象出来,不然后面重构起来太麻烦!
实战代码片段:看看我们都干了什么?
初始化项目
npm create vite@latest my-app -- --template react-ts
cd my-app
npm install
安装Tailwind CSS
安装必要的依赖:
npm install -D tailwindcss postcss autoprefixer @vitejs/plugin-react
npx tailwindcss init -p
然后配置tailwind.config.js:
module.exports = {
content: [
"./index.html",
"./src/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
再修改index.css:
@tailwind base;
@tailwind components;
@tailwind utilities;
这样就可以在项目中愉快地使用Tailwind啦!
封装Axios请求
在services/api.ts中封装基础请求方法:
import axios from 'axios';
const apiClient = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL,
timeout: 10000,
});
export default apiClient;
在.env文件中配置环境变量:
VITE_API_BASE_URL=https://api.example.com/v1
这样就可以通过import.meta.env.VITE_XXX访问了。
状态管理怎么办?别急着引入Redux
刚开始我们也没有用Redux,只是用Context + useReducer做了全局的状态管理。后来项目做到一半发现确实不够用了,又切换到Zustand,体验很好,简单、轻量、API友好。
开发中的踩坑经验:那些年我掉过的坑
🐞 问题一:浏览器兼容性差点翻车
原本以为现代前端项目只要支持Chrome最新版就行,结果上线后客户反映系统无法运行。查日志发现,有些用户还在用IE11,而我们的代码并没有做转译。
解决方法:在Vite配置中加入Babel,并添加polyfill支持旧浏览器。
// vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import legacy from '@vitejs/plugin-legacy';
export default defineConfig({
plugins: [
react(),
legacy({
targets: { ie: '11' },
additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
}),
],
});
🐞 问题二:Tailwind类名太多导致打包体积增大
Tailwind默认会生成大量未使用的类名,如果不做优化会导致CSS文件过大。为此我们引入了PurgeCSS进行按需清理。
// tailwind.config.js
module.exports = {
content: [
"./index.html",
"./src/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
corePlugins: {
preflight: false,
}
}
同时,在构建时启用Purge:
npm run build -- --modern
Vite本身也有自动裁剪的能力,结合Tree-shaking和Dead code elimination,最终打包后的CSS体积控制得很不错。
性能优化小技巧分享

前端性能优化是个大话题,这里我只分享几个我在本项目中用上的小技巧:
💡 使用React.lazy + Suspense 做动态导入
const LazyComponent = React.lazy(() => import('./MyComponent'));
function App() {
return (
<React.Suspense fallback="Loading...">
<LazyComponent />
</React.Suspense>
);
}
💡 组件懒加载+路由懒加载
借助React Router v6的lazy特性:
const Dashboard = lazy(() => import('../pages/Dashboard'));
function AppRoutes() {
return (
<Route path="/dashboard" element={
<Suspense fallback="Loading...">
<Dashboard />
</Suspense>
} />
);
}
这样每个页面都能独立打包,首屏加载更快。
💡 图片压缩+WebP格式
图片资源我们统一用WebP格式,体积比PNG小不少,同时利用<img srcset>属性适配不同设备。
结果与收益:项目上线后的反馈
项目上线后,得到了几个关键指标的好评:
- 首屏加载时间:2.4s → 优化后1.1s
- 整体包大小:从初始的2.7MB降到了1.2MB
- 客户反馈:界面响应迅速、操作流畅
更重要的是,后续迭代时也更加轻松,新增模块和功能的时间大大缩短。
写在最后:给刚起步朋友的一些建议
如果你也打算从零开始构建一个前端项目,不妨记住以下几点:
- 不要一上来就敲代码!先理清楚技术选型、架构思路、团队协作方式。
- 框架和库选型要考虑可维护性和长期成本,而不是短期炫技。
- 尽早引入CI/CD流程,哪怕是个简单的部署脚本,也能节省很多重复劳动。
- 关注性能细节,用户体验永远第一位。
- 多留点时间做技术债务整理,别让明天的你被今天的代码坑死。
在这个过程中我也曾焦虑、迷茫过,尤其是在PM改需求的第N次时崩溃,也在深夜调试Tailwind样式的时候骂娘。但回头看来,这些经历都成了宝贵的经验财富。
如果你觉得这篇文章有帮助,欢迎留言或私信交流,我们一起在前端路上越走越远!
祝你在下一个新项目里顺顺利利,少踩坑,多出活!

评论 0