注册
web

为什么说 AI 时代,前端开发者对前端工程化的要求更高了❓❓❓

前端工程化在前端领域地位极高,因为它系统性地解决了前端开发中效率、协作、质量、维护性等一系列核心问题,可以说是现代前端技术体系的基石。

前端工程化带来的价值可以从这四个方面看:

  1. 提升开发效率:

    • 模块化开发:通过组件、模块拆分使开发更加清晰,复用性更强。
    • 自动化构建:Webpack、Vite 等工具自动处理打包、压缩、转译等。
    • 代码热更新 / HMR:开发过程中能实时看到改动,节省调试时间。
  2. 规范团队协作

    • 代码规范检查:如 ESLint、Stylelint 统一代码风格,避免“风格大战”。
    • Git 提交规范:如使用 commitlint + husky 保证提交信息标准化。
    • 持续集成(CI):如 GitHub Actions、Jenkins 保证每次提交自动测试、构建。
  3. 提升代码质量和可维护性

    • 单元测试 / 集成测试:如 Jest、Cypress 确保代码稳定可靠。
    • 类型系统支持:TypeScript 保证更严格的类型检查,降低 Bug 率。
    • 文档生成工具:如 Storybook、jsdoc 方便维护和阅读。
  4. 自动化部署与运维

    • 自动化构建发布流程(CI/CD)使得上线更安全、更快速。
    • 多环境配置管理(开发/测试/生产)更加方便和稳定。

总的来说,前端工程化让开发者从单纯的 “切图仔” 成长为能够参与大型系统开发的工程师。通过引入规范与工具,不仅显著提升了团队协作效率,还有效减少了开发过程中的冲突与返工,成为现代前端团队协作的 “润滑剂”

什么是前端工程化

前端工程化 大约在 2018 年前后在国内被广泛提出,其核心是将后端成熟的软件工程理念、工具与流程系统性地引入前端开发。

它旨在通过规范、工具链与协作流程,提升开发效率、保障交付质量、降低维护成本。前端工程化不只是技术选型,更是一种体系化、流程化的开发方式。

其核心包括代码规范、自动化构建、模块化设计、测试体系和持续集成等关键环节。通过工程化,前端从“写页面”转向“做工程”,实现了从个体开发到团队协作的转变。

它不仅优化了前端的生产方式,也推动了大型系统开发中前端角色的重要性。如今,前端工程化已成为现代前端开发不可或缺的基础能力。

为什么 AI 时代,前端工程化更重要

在 AI 时代,前端工程化不仅没有“过时”,反而变得更重要,甚至成为人机协作高效落地的关键基石。原因可以从以下几个方面理解。

虽然 AI 可以辅助生成代码、文档甚至 UI,但它并不能替代工程化体系,原因有:

  1. AI 的代码质量不稳定:没有工程化流程约束,容易引入 Bug 或不一致的风格。
  2. AI 更依赖工程规范作为提示上下文:没有良好的工程结构,AI 输出也会混乱低效。
  3. AI 更像“助理”,而非“工程师”:它执行快,但依然需要工程体系保障产出质量和集成稳定性。

最差的情况下有可能会删除或者修改你之前已经写好的代码,如果缺少这些工程化的手段,你甚至不知道它已经修改你的代码了,最终等到上线的时候无数的 bug 产生。

通过标准化输出让 AI 更智能,清晰的项目结构、代码规范、模块划分能让 AI 更准确地补全、修改或重构代码。例如 ESLint、TypeScript 的规则为 AI 提供了明确的限制条件,有助于生成更高质量的代码。

在生成的代码需要规范,生成完成之后更需要检验,大概的流程也有如下几个方面:

  1. 格式化检查(Prettier、ESLint)
  2. 单元测试(Jest)
  3. 构建打包(Vite/Webpack)
  4. 自动部署(CI/CD)

没有工程化,AI 产出的代码难以被真正“上线使用”。

AI 时代,对一些 CRUD 的简单要求减少了,但是对工程化提出了更高要求。

方面普通时代要求AI 时代新挑战
模块结构清晰划分需辅助 AI 理解上下文
代码规范避免团队矛盾指导 AI 输出符合规范
自动化测试保证功能正确验证 AI 代码不会引发异常
CI/CD 流程提升上线效率确保 AI 代码自动验证上线

前端工程化

接下来我们将分为多个小节来讲解一下前端工程化的不同技术充当着什么角色。

技术选型

在前端工程化中,技术选型看似是一道“选择题”,本质上却关系到项目的开发效率、团队协作和未来的可维护性。对于框架选择而言,建议优先考虑两个关键因素:

  1. 团队熟悉程度:选择你或团队最熟悉的框架,能确保在遇到复杂或疑难问题时,有人能迅速定位问题、解决“坑点”,避免因为不熟悉而拖慢项目进度。
  2. 市场占有率与人才生态:选择主流、活跃度高的框架(如 Vue、React),不仅能更容易找到合适的开发者,还意味着有更丰富的社区资源、第三方生态和维护支持,降低长期人力与技术风险。

统一规范

统一规范又分为代码规范、git 规范、项目规范和 UI 规范。

代码规范

统一代码规范带来的好处是显而易见的,尤其在团队开发中更显重要:

  1. 提升团队协作效率:统一的代码风格能让团队成员在阅读和理解他人代码时无障碍,提高沟通效率,减少因风格差异带来的理解成本。
  2. 降低项目维护成本:规范的代码结构更易读、易查、易改,有助于快速定位问题和后期维护。
  3. 促进高效 Code Review:一致的代码格式可以让审查者专注于业务逻辑本身,而非纠结于命名、缩进等细节。
  4. 帮助程序员自身成长:遵循良好的代码规范,有助于开发者养成系统化的编程思维,提升工程意识和代码质量。

当团队成员都严格遵循统一的代码规范时,整个项目的代码风格将保持高度一致,看别人的代码就像在看自己的代码一样自然顺畅。

为了实现这一目标,我们可以借助工具化手段来强制和规范编码行为,例如使用 ESLint 检查 JavaScript/TypeScript 的语法和代码质量,Stylelint 统一 CSS/SCSS 的书写规范,而 Prettier 则负责自动格式化各类代码,使其保持整洁一致。

这些工具不仅能在编码阶段就发现潜在问题,还能集成到 Git Hook 或 CI 流程中,确保所有提交的代码都符合团队标准。统一规范减少了 code review 中对格式问题的争论,让团队更专注于业务逻辑的优化。

更重要的是,长期在规范的约束下编程,有助于开发者养成良好的工程素养和职业习惯,提升整体开发质量和协作效率。工具是手段,习惯是目标,工程化规范最终是为了让每一位开发者都能写出“团队级”的代码。

除了上面提到的,还有很多相同功能的工具这里就不细说了。

Git 规范

Git 规范主要指团队在使用 Git 进行代码版本管理时,对分支策略、提交信息、代码合并方式等的统一约定,其目标是提升协作效率、降低沟通成本、保障版本可控。

分支管理规范可以遵循如下 Git Flow 模型:

main        # 生产环境分支
develop # 开发集成分支
feature/* # 功能分支
release/* # 发布准备分支
hotfix/* # 线上紧急修复分支

分支重要,提交信息规范也更重要,一份清晰规范的提交信息对后期维护、回滚、自动发布都非常重要,好的提交信息让其他协作人员知道你这个分支具体做了什么。

推荐使用 Conventional Commits 规范,格式如下:

<type>(): 

常见的  类型:

类型说明
feat新增功能
fix修复 bug
docs修改文档
style格式修改(不影响代码运行)
refactor重构(无新功能或修复)
test添加测试
chore构建过程或辅助工具变动

如下示例所示:

feat(login): 添加用户登录功能
fix(api): 修复接口返回字段错误
docs(readme): 完善项目使用说明

配套的工具推荐如下表所示:

工具作用
Commitlint校验提交信息是否符合格式规范
HuskyGit 钩子管理工具(如提交前检查)
lint-staged提交前只格式化/检查改动的文件
Standard Version自动生成 changelog、自动打 tag 和版本号

Git 规范,是让代码“有条不紊”地流动在团队之间的交通规则,是高效协作和持续交付的基础设施。

项目规范

项目规范是对整个项目工程的结构、组织方式、开发约定的一套统一标准,它能帮助团队协作、代码维护、快速上手和高质量交付。

项目目录结构规范可以让项目保持统一、清晰的项目目录结构,有助于快速定位文件、分工协作,如下是一个简单的目录规范:

src/
├── assets/ # 静态资源(图片、字体等)
├── components/ # 可复用的基础组件
├── pages/ # 页面级组件
├── services/ # API 请求模块
├── utils/ # 工具函数
├── hooks/ # 自定义 hooks(React 项目)
├── styles/ # 全局样式
├── config/ # 配置文件(如常量、环境变量)
├── router/ # 路由配置
├── store/ # 状态管理(如 Vuex / Redux)
└── main.ts # 应用入口

这只是一个很简答也很通用的目录结构,还有很多进阶的目录结构方案。

命名方式,这个可以根据不同的团队不同的风格来指定。

部署

借助自动化流程实现一键部署或者自动部署,常用的工具主要有以下:

  1. GitHub Actions
  2. GitLab CI
  3. Jenkins

流程通常如下:

Push → 检查代码规范 → 构建 → 运行测试 → 上传产物 → 通知部署 → 上线

可以参考一下 Action 配置:

name: Deploy Next.js to Alibaba Cloud ECS

on:
push:
branches:
- main

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4.2.0

- name: Set up Node.js
uses: actions/setup-node@v4.2.0
with:
node-version: "22.11.0"

- name: Install pnpm
run: npm install -g pnpm@9.4.0

- name: Deploy to server via SSH
uses: appleboy/ssh-action@v1.2.1
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
port: ${{ secrets.SERVER_PORT }}
password: ${{ secrets.SERVER_PASSWORD }}
script: |
# 显示当前环境信息
echo "Shell: $SHELL"
echo "PATH before: $PATH"

# 加载环境配置文件
source ~/.bashrc
source ~/.profile

# 如果使用 NVM,加载 NVM 环境
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

# 添加常见的 Node.js 安装路径到 PATH
export PATH="$HOME/.nvm/versions/node/*/bin:/usr/local/bin:/usr/bin:/bin:$HOME/.npm-global/bin:$PATH"
echo "PATH after: $PATH"

# 查找 npm 的位置
which npm || echo "npm still not found in PATH"

# 使用绝对路径查找 npm
NPM_PATH=$(find /usr -name npm -type f 2>/dev/null | head -1)
if [ -n "$NPM_PATH" ]; then
echo "Found npm at: $NPM_PATH"
export PATH="$(dirname $NPM_PATH):$PATH"
fi

# 确保目标目录存在
mkdir -p /home/interview-guide
cd /home/interview-guide

# 如果本地仓库不存在,进行克隆
if [ ! -d "/home/interview-guide/.git" ]; then
echo "Cloning the repository..."
# 删除可能存在的空目录内容
rm -rf /home/interview-guide/*
# 使用 SSH 方式克隆
git clone git@github.com:xun082/interview-guide.git .
else
# 确保远程 URL 使用 SSH
git remote set-url origin git@github.com:xun082/interview-guide.git
# 获取最新代码
git fetch origin main
git reset --hard origin/main
fi

# 使用找到的 npm 路径或尝试直接运行
if [ -n "$NPM_PATH" ]; then
$NPM_PATH install -g pnpm@9.4.0
$NPM_PATH install -g pm2
else
npm install -g pnpm@9.4.0
npm install -g pm2
fi

# 安装依赖
pnpm install || npm install

# 构建项目
pnpm run build || npm run build

# 重启应用
pm2 restart interview-guide || pm2 start "pnpm start" --name interview-guide || pm2 start "npm start" --name interview-guide

这段 GitHub Actions 配置实现了将 Next.js 项目自动部署到阿里云 ECS 服务器的流程。它在检测到 main 分支有新的代码提交后,自动拉取代码、安装依赖并构建项目。随后通过 SSH 远程连接服务器,拉取或更新项目代码,并使用 PM2 启动或重启应用。整个流程自动化,无需人工干预,保障部署高效、可重复。

除了 PM2 之外,我们还可以使用 Docker 镜像部署。

🛡️ 监控

前端监控是指:对 Web 应用在用户真实环境中的运行状态进行实时采集与分析,以发现性能瓶颈、错误异常和用户行为,最终帮助开发团队提升系统稳定性和用户体验。

🚦 性能监控

性能监控的目标是衡量页面加载速度、交互流畅度等关键性性能指标。

常见指标:

  1. 首屏加载时间(FP/FCP)
  2. 页面完全加载时间(Load)
  3. 首次输入延迟(FID)
  4. 长任务(Long Task)
  5. 慢资源加载(如图片、脚本)

它有助于定位性能瓶颈(如资源过大、阻塞脚本)、优化用户体验(如加载缓慢或白屏问题),并支持性能回归分析,及时发现上线后的性能退化。

❌ 错误监控

错误监控的目标是捕捉并上报运行时异常,辅助开发快速修复 Bug。

常见的错误类型主要有以下几个方面:

错误类型示例说明
JS 运行错误ReferenceErrorTypeError 等
Promise 异常unhandledrejection
资源加载失败图片、脚本、字体 404、403
网络请求异常接口失败、超时、断网等
跨域/白屏CORS 错误、DOM 元素为空
控制台报错console.error() 日志监控
用户行为异常点击无响应、重复操作、高频异常等

假设我们使用了 fetch 进行封装,那么我们就可以对错误进行统一处理,后续我们可以再具体调用的时候根据不同的场景来传入不同的错误提示告知用户:

dc087a4417765c239c2d104ee5d03548

错误上报

数据上报是指前端在运行过程中将采集到的监控信息(性能、错误、行为等)发送到服务端的过程。它是前端监控从“收集”到“分析”的桥梁。

上报的数据类型主要有以下几个方面:

类型说明
性能数据页面加载时间、资源加载时间、Web Vitals 等
错误信息JS 异常、Promise 异常、请求失败、白屏等
用户行为点击、跳转、页面停留时间、操作路径等
自定义事件特定业务事件,如支付、注册等
环境信息浏览器版本、设备类型、操作系统、用户 IP 等

数据上报需要重点考虑的几个关键因素:

  1. 怎么上报(上报方式)

    • 使用 sendBeacon、fetch、img 打点还是 WebSocket?
    • 是否异步?是否阻塞主线程?
    • 是否需要加密、压缩或编码?

建议:选择 异步非阻塞 且浏览器支持好的方式(优先 sendBeacon),并对数据做统一封装处理。

  1. 何时上报(上报时机)

    • 立即上报:错误发生后马上发送(如 JS 报错)
    • 延迟上报:页面稳定后延迟几秒,防止干扰首屏加载
    • 页面卸载前上报:用 sendBeacon 上报用户停留数据等
    • 批量上报:积累一批数据后统一发送,减少请求频率
    • 定时上报:用户停留一段时间后定期上报(行为数据)

建议:根据数据类型区分时机,错误即时上报、性能延迟上报、行为数据可批量处理。

  1. 上报频率控制(防抖 / 节流 / 采样)

    • 错误或点击频繁时可能产生大量上报请求
    • 需要加防抖、节流机制,或采样上报(如只上报 10% 用户)

🔍 建议:对于高频行为(如滚动、点击),加防抖或只上报部分用户行为,避免拖垮前端或服务端。

  1. 异常处理与重试机制:遇到网络断开、后端失败等应支持自动重试或本地缓存,可将数据暂存至 localStorage,等网络恢复后重发
  2. 数据结构设计:统一字段格式、数据类型,方便服务端解析,包含上下文信息:页面 URL、用户 ID、浏览器信息、时间戳等,如下所示:
{
"type": "error",
"event": "ReferenceError",
"message": "xxx is not defined",
"timestamp": 1716280000000,
"userId": "abc123",
"url": "https://example.com/home"
}

总的来说,数据上报是前端监控的核心环节,但只有在合适的时机,用合适的方式,上报合适的数据,才能真正发挥价值。


作者:Moment
来源:juejin.cn/post/7506414257401004071

0 个评论

要回复文章请先登录注册