前端工程化核心原理与实践进阶

加载中... 浏览

本篇文章主要探讨前端工程化中的进阶技术要点,侧重于错误捕获机制、页面性能调优及系统安全性建设。

一、 错误捕获与白屏问题排查

核心探讨:项目中的错误捕获机制及常用手段有哪些?

答:

  • 使用 try…catch 捕获同步代码错误
  • 利用 window.onerror 捕获运行时错误
  • 使用 window.addEventListener('unhandledrejection') 捕获未处理的 Promise 异常
  • 使用 ErrorBoundary(React 项目)捕获组件渲染错误
  • 日志上报(埋点)系统 + source map 映射调试

Q2:项目上线出现白屏问题,你是如何排查的?

答:

  • 检查是否有主 JS 加载失败(查看 Chrome DevTools Network)
  • 查看是否有资源跨域CDN 缓存source map 报错等问题
  • 控制台是否有报错(如模块加载失败运行时错误
  • index.html 是否渲染,或根组件是否挂载成功
  • 加入 loading skeletonfallback 机制防止页面完全空白
  • 使用性能监控平台(如 Sentry 等开源库 or 公司自研的平台)追踪首屏渲染失败

二、 构建工具:Vite vs Webpack

Q3:Vite 和 Webpack 构建流程的区别?

对比点ViteWebpack
启动速度(原生 ESM + 按需加载)(需打包全部依赖)
构建速度更快(esbuild + rollup)(全部打包 + 复杂 loader)
热更新局部更新快模块热替换(HMR)
使用的工具链esbuild + Rollup自身打包
开箱即用程度,零配置即用可配置性更强
生态插件Rollup 插件生态 + Vite 插件Webpack 插件丰富

Q4:在什么场景下你更倾向于使用 Vite?

答:

  • 开发阶段追求启动快、热更快的中小型项目
  • Vue3、React18 项目,支持 modern 构建
  • 多页面组件库开发

三、 模块系统与打包产物格式

Q5:ESM 与 UMD 的区别?如何同时输出两种格式?

答:

特性ESM(ES Modules)UMD(Universal Module Definition)
导入方式import / export支持 CommonJS、AMD 和全局变量
运行环境现代浏览器、Node(ESM 支持)浏览器、Node 全兼容
Tree shaking支持不支持

同时输出方式(以 Rollup 为例):

javascript
export default [
  {
    input: 'src/index.ts',
    output: [
      { file: 'dist/index.esm.js', format: 'es' },
      { file: 'dist/index.umd.js', format: 'umd', name: 'MyLib' },
    ],
    plugins: [typescript()],
  },
]

四、 Webpack 插件与 Loader 概念

Q6:Plugin 和 Loader 有什么区别?

类型LoaderPlugin
用途转换模块内容(如 JS、TS、CSS)拓展构建能力(如打包优化、注入变量)
执行时机模块解析阶段整个构建生命周期
例子babel-loader, css-loaderHtmlWebpackPlugin, DefinePlugin

Q7:你使用过哪些常用插件和 loader?

Loader:

  • babel-loader:转译 JS
  • ts-loader / esbuild-loader:处理 TypeScript
  • sass-loader / less-loader:样式预处理
  • url-loader, file-loader:处理图片/字体资源

Plugin:

  • HtmlWebpackPlugin:生成 HTML 并注入打包资源
  • DefinePlugin:注入全局变量
  • MiniCssExtractPlugin:提取 CSS
  • CopyWebpackPlugin:复制静态文件
  • BundleAnalyzerPlugin:可视化打包体积分析

五、 包管理工具:npm vs pnpm

Q8:npm 与 pnpm 有什么区别?pnpm 为什么构建更快?

答:

特性npmpnpm
安装机制扁平安装(node_modules 膨胀)使用硬链接共享依赖,目录干净
性能较慢快速,使用内容寻址的缓存机制
磁盘占用多份依赖冗余去重好,磁盘空间使用少
工作区支持有,但限制较多原生支持 monorepo 项目

六、 Monorepo 理解

Q9:什么是 Monorepo?你如何管理 Monorepo 项目?

答:

Monorepo(单一仓库)是将多个项目模块集中在一个代码仓库中管理的开发模式,常配合工具如:

  • pnpm workspace
  • Lerna(老工具)
  • Turborepo(现代构建加速工具)

优点:

  • 模块之间便于协作和共享
  • 统一管理依赖和脚本
  • 提高版本发布效率

实践经验(如简历写了 Monorepo):

  • 使用 pnpm workspace 管理组件库与主应用
  • 设置根目录构建脚本,提升统一构建与测试效率
  • 利用 turbo.json 设定缓存和依赖追踪,加速 CI/CD

七、 附加问题(工程化能力拓展)

Q10:你是如何做性能优化的?

  • 开启 gzip 压缩和代码分割 (splitChunks)
  • 使用 CDN懒加载预加载
  • Tree-shaking按需加载组件
  • 图片压缩(如 imagemin)、使用 WebP
  • SSR/CSR 混合、首屏 skeleton

Q11:如何提升前端项目的可维护性?

  • 代码模块化、组件化
  • 使用类型系统(如 TypeScript)
  • 严格代码规范(ESLint + Prettier
  • Git Commit 规范(如 conventional commits)
  • 单元测试(Jest + RTL)+ 集成测试

留言板

加载评论中...
CampusHub:基于状态与路由的跨页面缓存隔离
Valaxy v0.28.0-beta.1 驱动|主题-Yunv0.28.0-beta.1