不可不知的前端工程化 —— 初识篇
背景
前端工程化的出现是为了应对前端开发的复杂性和多样性。随着前端技术的不断发展和变革,前端的业务逻辑逐渐变得复杂多样,企业对于前端的应用功能要求也跟着不断提高,例如优化开发流程、提高编码效率、提升代码质量,提高项目的可维护性和性能、促进团队协作等。
工程化思路
前端工程化的思路是将前端整个开发的过程、技术、工具、经验等规范化、标准化,以提高效率和降低成本,对于日常被工程化环境下裹挟的工程师们,不管是前端团队的leader,还是具体模块的开发者,理解并有效的在项目中运用工程化的思维,可以多方位、立体地感知自己在开发过程中所处的位置,明确目标和方向,以保证前端应用的质量和性能。
工程化实现
具体可以从以下几个方面来实现前端工程化:
1、选用合适的技术栈
选择合适的技术栈,例如框架、组件库、语言等,根据项目的需求和团队的熟悉程度来选择。
前端框架
:用于提供基础的页面结构、组件、路由、状态管理等功能,简化前端开发的复杂度。常用的前端框架有 Vue、React、Angular 等。
脚手架
:用来快速搭建项目基础代码的工具,可以避免重复编写相同的代码框架和基础配置。根据搜索结果,有一些比较流行的前端脚手架工具,例如 Vue CLI、create React App、Yeoman等。
UI 组件库
:用于提供一系列可复用的 UI 组件,例如按钮、表单、表格、对话框等,提高前端开发的效率和一致性。常用的 UI 组件库有 Element UI、Ant Design、Bootstrap 等。
语言
:用于编写前端代码的编程语言,通常需要转译为浏览器能够识别的 JavaScript 代码。常用的语言有 TypeScript、CoffeeScript、Dart 等。
打包工具
:用于将前端代码进行转译、压缩、合并等操作,生成可以在生产环境中运行的代码。常用的打包工具有 Webpack、Vite、Rollup 等。
请求库
:用于发送和接收 HTTP 请求,与后端进行数据交互。常用的请求库有 Axios、Fetch API、jQuery Ajax 等。
2、制定代码规范
制定统一的代码规范,例如命名、缩进、注释等,使用工具来检查和格式化代码,保证代码的可读性和一致性。常见的代码规范工具有 ESLint、Prettier 等。
制定代码规范常用方法:
-
参考已有的代码规范文档,例如腾讯、百度、阿里等公司或社区发布的前端代码规范,结合自己或团队的实际情况进行选择或修改。
-
使用代码规范工具,例如 ESLint、Prettier、Stylelint 等,来检查和格式化代码,保证代码符合预设的规范标准。
ESLint
: 一个 JavaScript 和 TypeScript 的代码规范检查工具,可以检测代码中的语法错误、风格问题、潜在的 bug 等,并且可以自定义规则或使用现有的规则集,例如 Airbnb、Google 等。Prettier
: 一个代码格式化工具,可以自动修复代码中的缩进、空格、分号、引号等格式问题,使代码更加整洁和一致。Stylelint
: 一个 CSS 和 SCSS 的代码规范检查工具,可以检测代码中的语法错误、风格问题、重复代码等,并且可以自定义规则或使用现有的规则集,例如 Standard、Bootstrap 等。SonarQube
: 一个代码质量管理平台,可以对多种语言的代码进行静态分析,检测代码中的安全漏洞、坏味道、重复度等,并且提供可视化的报告和建议。 -
在团队内部进行 code review 和反馈,及时发现和改正不符合规范的代码,形成良好的编码习惯。
3、代码版本管理
用于管理和协调代码的版本、分支、合并等,方便团队协作和回溯。常见的代码管理工具有GitLab、 Git、SVN 等。
Git
:比较流行的开源分布式版本控制系统。原理是将代码分为工作区、缓存区和版本库三个部分,每次修改代码后,需要先将修改添加至缓存区,然后再提交到版本库。Git还提供了多种分支管理策略,如GitFlow,可以根据不同的开发场景创建和合并不同的分支,如feature分支、release分支
hotfix分支。
GitLab
:GitLab是一个基于Git的开源的DevSecOps平台,提供了从项目管理、代码托管、持续集成、持续交付、安全测试、监控等一系列的功能。GitLab可以部署在自己的服务器上,也可以使用GitLab.com这个云服务。
SVN
:SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。
4、模块化
用于将复杂的前端代码分解为有明确功能和接口的模块,便于复用、维护和测试。常见的模块化规范有 CommonJS、ES6 Module 等。常见的实现方式有:
全局函数模式
: 将不同的功能封装成不同的全局函数,缺点是污染全局命名空间,容易引起命名冲突或数据不安全。
命名空间模式
:使用一个全局对象来存放所有的模块,减少了全局变量,但是数据仍然不安全。
IIFE模式
:使用立即执行函数表达式来创建私有作用域,通过返回值暴露接口,实现了模块的封装和隔离。
CommonJS模式
:使用require函数来同步加载依赖的模块,使用module.exports或exports对象来导出模块接口,适用于服务器端开发,如Node.js。
AMD模式
: 使用define函数来异步定义模块,使用require函数来异步加载依赖的模块,适用于浏览器端开发,如RequireJS。
CMD模式
:使用define函数来异步定义模块,使用require函数来同步加载依赖的模块,支持动态加载和延迟执行,适用于浏览器端开发,如SeaJS。
ES6模式
: 使用import语句来导入依赖的模块,使用export语句来导出模块接口,支持静态和动态导入,是官方推荐的标准化方式。
5、组件化
用于将页面拆分为可复用的 UI 组件,每个组件有独立的 HTML、CSS、JS 代码,可以根据不同的需求进行组合。常见的组件化框架有 Vue、React 等。
Vue.js
:一套渐进式的前端框架,提供了响应式数据绑定、单文件组件、虚拟DOM、路由、状态管理等功能,适用于构建用户界面和单页面应用。
React
:一套用于构建用户界面的JavaScript库,提供了组件化开发、虚拟DOM、Hooks、Redux等功能,适用于构建复杂的Web应用和原生应用。
Angular
:一套基于TypeScript的前端框架,提供了组件化开发、依赖注入、双向数据绑定、路由、服务等功能,适用于构建企业级的Web应用。
Web Components
:一套基于HTML5标准的原生组件化方案,提供了自定义元素、模板、插槽、影子DOM等功能,适用于构建跨框架的可复用的Web组件。
6、开启本地服务联调
前端项目开启本地服务联调的目的是为了在开发过程中与后端进行数据对接和调试,解决跨域等问题。
使用代理服务
:在前端项目中配置一个代理服务,将本地的请求转发到后端的服务器地址,从而绕过浏览器的同源策略。不同的前端框架或工具有不同的代理配置方式,例如 Vue CLI 可以在 vue.config.js 中配置 devServer.proxy ,Create React App 可以在 package.json 中配置 proxy 等。
使用Mock数据
:在前端项目中使用 Mock.js 或其他类似的库来模拟后端返回的数据格式和内容,从而无需依赖后端接口进行开发。这种方法可以提高开发效率,但需要保证 Mock 数据和真实数据的一致性。
使用CORS
:在后端项目中设置响应头 Access-Control-Allow-Origin 为前端项目的地址,从而允许跨域请求。这种方法需要后端的配合,但可以避免前端的额外配置。
7、构建工具
使用构建工具来自动化处理开发阶段的代码,例如转译、压缩、合并等,使代码能够在生产环境中正常运行。常见的构建工具有 Webpack、Vite、Gulp 等。
Webpack
:一套模块化的打包工具,可以将多个JavaScript、CSS、图片等文件打包成一个或多个bundle文件,支持代码分割、热更新、Tree Shaking等功能,适用于构建复杂的Web应用。
CSS预编译
:是指使用一种专门的编程语言来设计网页样式,然后再编译成正常的CSS文件。CSS预编译可以增加一些编程的特性,例如变量、函数、嵌套、混合等,使CSS更易维护和扩展。比较流行的CSS预编译语言如:Sass、Less、Stylus等。
Gulp
:一套基于流的自动化构建工具,可以将多个任务(如编译、压缩、合并等)组合成一个流程,支持插件扩展、文件监听等功能,适用于构建简单的Web应用。
Rollup
:一套基于ES6模块的打包工具,可以将多个JavaScript文件打包成一个bundle文件,支持Tree Shaking、代码分割等功能,适用于构建库和框架。
Vite
:一套基于ES6模块和原生ESM的打包工具,可以实现无需打包的开发服务器,并在生产环境中使用Rollup进行优化打包,支持热更新、按需编译等功能,适用于构建现代化的Web应用。
8、自动化测试工具
使用自动化测试工具来编写和执行测试用例,保证代码的功能正确性和稳定性,提高代码的可信度。 常见的自动化测试工具有 Jest、Mocha、Cypress 等。
Mocha
:一套灵活的JavaScript测试框架,可以运行在Node.js和浏览器中,支持异步测试、钩子函数、断言库等功能,适用于编写单元测试和集成测试。
Jasmine
:一套基于行为驱动开发(BDD)的JavaScript测试框架,可以运行在Node.js和浏览器中,支持异步测试、模拟对象、自带断言库等功能,适用于编写单元测试和集成测试。
Jest
:一套基于Jasmine的JavaScript测试框架,可以运行在Node.js中,支持快照测试、模拟对象、代码覆盖率等功能,适用于编写React和Vue等框架的单元测试和集成测试。
Karma
:一套JavaScript测试执行器,可以在多个真实的浏览器中运行测试代码,支持与Mocha、Jasmine等框架配合使用,适用于编写跨浏览器的单元测试。
Cypress
:一套基于Chrome的端到端(E2E)测试框架,可以在浏览器中运行测试代码,并提供了可视化的界面和调试工具,支持网络模拟、自动重试等功能,适用于编写Web应用的UI测试。
9、部署工具
使用部署工具来自动化发布代码到服务器上,实现持续集成和持续交付的流程,提高发布的效率和安全性。常见的部署工具有 Jenkins、Travis CI 等。
Jenkins
:一套开源的持续集成和持续交付的工具,可以通过配置流水线来自动化执行构建、测试、部署等任务,支持插件扩展、分布式构建等功能,适用于多人协作的大型项目。
Travis CI
:一套基于云的持续集成和持续交付的工具,可以通过配置.travis.yml文件来自动化执行构建、测试、部署等任务,支持与GitHub集成、多语言支持等功能,适用于开源项目。
GitHub Actions
:一套基于云的自动化工作流的工具,可以通过配置.yml文件来自动化执行构建、测试、部署等任务,支持与GitHub集成、多平台支持等功能,适用于GitHub托管的项目。
Netlify
:一套基于云的静态网站托管和部署的工具,可以通过配置netlify.toml文件来自动化执行构建、测试、部署等任务,支持与GitHub集成、自定义域名、SSL证书等功能,适用于静态网站和单页面应用。
10、监控工具
使用监控工具来收集和分析应用的运行情况,例如错误日志、性能指标、用户行为等,帮助优化和改进应用。常见的监控工具有 阿里ARMS、Sentry 等。
阿里ARMS
:一个全面的应用性能管理平台,可以监测前端、后端、移动端等各种应用的性能和错误,并提供实时分析和告警。
FUNdebug
:一个专注于前端和小程序的错误监控平台,可以捕获前端、小程序、React Native等各种环境下的错误信息,并提供实时通知和分析。
sentry
:一个开源的错误追踪和异常处理平台,可以捕获前端、后端、移动端等各种环境下的错误信息,并提供实时通知和分析。
BombayJS
:一个开源的前端监控SDK,可以监测前端、小程序等各种应用的性能和错误,并提供数据上报和可视化查询。
结尾
以上,以横向广度的视角罗列了前端工程化涉及的各个环节,其本质还是围绕着项目开发的生命周期,遵循着 规划(技术选型、代码规范制定)
——>开发(代码版本管理、编码管理)
——> 本地联调
——> 构建(打包)
——> 测试
——> 部署
——> 监控
的开发过程。在实际工作中,在确保每一个过程都毫无遗漏,做到位的基础上,才能发挥工程化的最大效力。
转载自:https://juejin.cn/post/7244720558772256826