前端工程化与构建工具详解

server/2025/2/12 12:42:40/

四、项目设计与架构

1. 设计模式

观察者模式 vs 发布订阅模式

  • 观察者模式

    • 直接依赖:观察者直接订阅目标对象,目标对象维护观察者列表。
    • 适用场景:简单的一对多依赖关系(如事件监听)。
    • 示例:
      javascript">class Subject {constructor() {this.observers = [];}addObserver(observer) {this.observers.push(observer);}notify(data) {this.observers.forEach(observer => observer.update(data));}
      }class Observer {update(data) {console.log("Received data:", data);}
      }const subject = new Subject();
      const observer = new Observer();
      subject.addObserver(observer);
      subject.notify("Hello");
      
  • 发布订阅模式

    • 解耦:通过事件中心(Event Bus)管理订阅和发布,发布者和订阅者不直接通信。
    • 适用场景:复杂的多对多通信(如跨组件通信、微前端)。
    • 示例:
      javascript">class EventBus {constructor() {this.events = {};}on(event, callback) {if (!this.events[event]) this.events[event] = [];this.events[event].push(callback);}emit(event, data) {if (this.events[event]) {this.events[event].forEach(callback => callback(data));}}
      }const eventBus = new EventBus();
      eventBus.on("message", data => console.log("Received:", data));
      eventBus.emit("message", "Hello");
      

单例模式

  • 核心思想:确保一个类只有一个实例,并提供全局访问点。
  • 应用场景:全局状态管理(如 Redux Store)、日志工具、数据库连接池。
  • 实现方式
    javascript">class Singleton {constructor() {if (!Singleton.instance) {Singleton.instance = this;}return Singleton.instance;}
    }const instance1 = new Singleton();
    const instance2 = new Singleton();
    console.log(instance1 === instance2); // true
    

组件设计:高阶组件(HOC)与自定义 Hook

  • 高阶组件(HOC)

    • 接收组件作为参数,返回增强后的组件。
    • 示例:
      javascript">function withLoading(WrappedComponent) {return function(props) {const [loading, setLoading] = useState(true);useEffect(() => {setTimeout(() => setLoading(false), 1000);}, []);return loading ? <Spinner /> : <WrappedComponent {...props} />;};
      }const EnhancedComponent = withLoading(MyComponent);
      
  • 自定义 Hook

    • 封装可复用的逻辑(如数据获取、表单处理)。
    • 示例:
      javascript">function useFetch(url) {const [data, setData] = useState(null);useEffect(() => {fetch(url).then(response => response.json()).then(data => setData(data));}, [url]);return data;
      }function MyComponent() {const data = useFetch("/api/data");return <div>{JSON.stringify(data)}</div>;
      }
      

2. 工程规范

代码规范:ESLint + Prettier

  • ESLint:检查代码质量(如未使用的变量、错误的语法)。
    • 配置:
      {"extends": ["eslint:recommended", "plugin:react/recommended"],"rules": {"no-console": "warn","react/prop-types": "off"}
      }
      
  • Prettier:格式化代码(如缩进、换行)。
    • 配置:
      {"semi": true,"singleQuote": true,"tabWidth": 2
      }
      
  • 集成:在 VSCode 中保存时自动格式化。

Git Commit 规范

  • Angular 规范
    <type>(<scope>): <subject>
    <body>
    <footer>
    
    • typefeat(新功能)、fix(修复)、docs(文档)、style(样式)、refactor(重构)、test(测试)、chore(构建/工具)。
    • scope:影响范围(如模块、组件)。
    • subject:简短描述。
    • 示例
      feat(user): add login functionality
      fix(auth): resolve token expiration issue
      

协作流程:Git Flow + CI/CD

  • Git Flow
    • main:稳定版本。
    • develop:开发分支。
    • feature/xxx:功能分支。
    • release/xxx:预发布分支。
    • hotfix/xxx:紧急修复分支。
  • CI/CD 集成
    • 自动化测试:每次提交运行单元测试、E2E 测试。
    • 镜像构建:通过 Dockerfile 构建镜像并推送到镜像仓库。
    • 部署:自动部署到测试/生产环境(如 Kubernetes)。

3. 安全与监控

安全防护

  • XSS 防御
    • 输入过滤:对用户输入进行转义(如 <> 转义为 &lt;&gt;)。
    • 使用安全的库:如 React 自动转义 JSX 中的变量。
    • 设置 HTTP 头:Content-Security-Policy 限制脚本加载。
  • CSRF 防御
    • 使用 CSRF Token:每次请求验证 Token。
    • 设置 SameSite Cookie:防止跨站请求伪造。

错误监控

  • 全局异常捕获
    javascript">window.onerror = (message, source, lineno, colno, error) => {console.error("Global error:", message, error);// 上报到 Sentry
    };
    
  • Sentry 集成
    javascript">import * as Sentry from "@sentry/react";
    Sentry.init({ dsn: "YOUR_DSN" });
    

性能监控

  • Lighthouse
    • 本地运行:Chrome DevTools 中的 Lighthouse 面板。
    • CI 集成:通过 lighthouse-ci 自动化性能测试。
  • 性能指标
    • FCP、TTI、LCP(最大内容绘制)、CLS(累积布局偏移)。

总结

  • 设计模式:观察者模式适合简单场景,发布订阅模式适合复杂通信,单例模式用于全局唯一实例。
  • 工程规范:ESLint/Prettier 保证代码质量,Git Commit 规范提升协作效率,Git Flow + CI/CD 实现自动化流程。
  • 安全与监控:防御 XSS/CSRF,捕获全局异常,监控性能指标。

http://www.ppmy.cn/server/167059.html

相关文章

CVE-2024-52046 Apache mina 反序列化漏洞简单分析

前言 最近披露了一个新的apache下属产品mina的CVE-2024-52046反序列化漏洞&#xff0c;首先查看cve官网公开的部分漏洞信息 https://www.cve.org/CVERecord?idCVE-2024-52046 感觉有点乱&#xff0c;像这种apache产品的漏洞一般在apache邮件列表归档网站中也会有信息&#x…

2025最新版Node.js下载安装~保姆级教程

1. node中文官网地址&#xff1a;http://nodejs.cn/download/ 2.打开node官网下载压缩包&#xff1a; 根据操作系统不同选择不同版本&#xff08;win7系统建议安装v12.x&#xff09; 我这里选择最新版win 64位 3.安装node ①点击对话框中的“Next”&#xff0c;勾选同意后点…

告别DeepSeek官方的服务器繁忙~腾讯云DeepSeek-V3/R1无限免费调用~不用安装任何东西~小白一学就会~

DeepSeek官方的服务经常崩溃&#xff0c;弄得我们也很崩溃。 还是腾讯云给力&#xff0c;DeepSeek 系列模型限时免费&#xff1a; 即日至北京时间2025年2月25日23:59:59&#xff0c;所有腾讯云用户均可享受 DeepSeek-V3、DeepSeek-R1 模型限时免费服务&#xff0c;单账号限制接…

【C++】RBTree(红黑树)模拟实现

文章目录 1.红黑树的概念2.红黑树的性质3.红黑树的结点4.insert函数&#xff08;插入结点&#xff09;5.左旋、右旋6.总代码 后续有时间会增加erase 1.红黑树的概念 红黑树是一种自平衡的二叉搜索树。每个节点额外存储了一个 color 字段 (“RED” or “BLACK”)&#xff0c; …

电赛DEEPSEEK

以下是针对竞赛题目的深度优化方案&#xff0c;重点解决频率接近时的滤波难题和相位测量精度问题&#xff1a; 以下是使用NI Multisim 14.3实现本项目的详细解决方案&#xff1a; 一、基础要求实现方案&#xff08;模块化设计&#xff09; 1. 双频信号发生电路 电路结构&…

elment ui 表格数据打印

通过调用浏览器自带的打印功能&#xff0c;完成对table数据的打印 &#xff08;打印表格必须要去掉表头中的fixed属性&#xff0c;每一列的宽度可以通过 width 来控制&#xff09; <el-table-column width100 prop"code" label""> </el-table-co…

鸿蒙NEXT开发-鸿蒙三方库

基本介绍 三方库是开发者在系统能力的基础上进行了一层具体功能的封装&#xff0c;对其能力进行拓展&#xff0c;提供更加方便的接口&#xff0c;提升开发效率的工具。 我们在之前的课程中学习过如何安装三方库axios了&#xff0c;我们大家可以通过ohpm install ohos/axios进行…

AWS全球加速架构在跨国实时交互系统中的优化实践

背景&#xff1a;跨境电商平台的性能瓶颈 某跨境电商平台&#xff08;为保护客户隐私简称Platform X&#xff09;业务覆盖北美、欧洲、东南亚三大区域&#xff0c;日均活跃用户超50万。其核心业务系统包含&#xff1a;商品实时竞价模块、跨国直播带货系统、动态定价API服务。…