前端工程化-打造企业通用脚手架

本文介绍了前端工程化的重要性和脚手架的作用,探讨了为什么不用自动化构建工具,阐述了脚手架的核心价值在于提高研发效率和标准化。通过详细讲解创建项目、配置、通用能力等方面,展示了一个基于企业需求的脚手架实现,旨在简化前端开发流程,提高工作效率。
摘要由CSDN通过智能技术生成

baa2bb78b85e660e3cfe5735c5763466.png

c01b33845bd4568d028c05581522846a.gif 

本文字数:10930

预计阅读时间:28分钟

前端工程化-打造企业通用脚手架

目录

  • 前言

  • 脚手架是什么?

    • 脚手架能力

    • 为什么不用自动化构建工具

    • 脚手架核心价值

  • 使用脚手架

  • @focus/cli架构

    • 依赖项概览

    • focus create projectName核心流程

      · 核心代码实现

      · 小结

    • focus add material核心流程

      · 核心代码实现

      · 小结

    • 通用能力

  • 总结

前言

随着前端工程化的概念越来越深入FEer心,前端开发过程的技术选型、代码规范、构建发布等流程的规范化、标准化是需要工具来保驾护航的,而不是每次都对重复工作进行手动复制粘贴。脚手架则可作为工程化的辅助工具,从很大程度上为前端研发提效

脚手架是什么?

那脚手架是什么呢?

在以往工作中,我们可能需要先做如下操作才能开始编写业务代码:

  • 技术选型

  • 初始化项目,选择包管理工具,安装依赖

  • 编写基础配置项

  • 配置本地服务,启动项目

  • 开始编码

随着Vue/React的兴起,我们可以借助官方提供的脚手架vue-clicreate-react-app在命令行中通过选择输入来按我们的要求和喜好快速生成项目。它们能让我们专注于代码,而不是构建工具。

脚手架能力

但是这些脚手架是针对于具体语言(Vue/React)的,而在我们实际工作中不同BU针对不同端(PC、Wap、小程序...)所采用的技术栈也可能不同,往往特定端采用的技术栈在一定程度上都可以复用的到其他类似项目中。我们更期望能在命令行通过几个命令和选择、输入构建出不同端不同技术栈的项目。

f66d466ec4114edf6b84b9cd07f0a065.png

上述只是新建项目的例子,前端开发过程中不止于此,一般有如下场景:

  • 创建项目+集成通用代码。项目模板中包含大量通用代码,比如通用工具方法、通用样式、通用请求库处理HTTP请求、内部组件库、埋点监控...

  • Git操作。一般需要手动在Gitlab中创建仓库、解决代码冲突、远程代码同步、创建版本、发布打Tag...等操作。

  • CICD。业务代码编写完成后,还需要对其进行构建打包、上传服务器、域名绑定、区分测试正式环境、支持回滚...等持续集成、持续部署操作。

为什么不用自动化构建工具

一般情况下,我们会采用Jenkins、Gitlab CI、Webhooks等进行自动化构建,为什么还需要脚手架?

因为这些自动化构建工具都是在服务端执行的,在云端就无法覆盖研发同学本地的功能,比如上述创建项目、本地Git操作等;并且这些自动化工具定制过程需要开发插件,前端同学对语言和实现需要一定学习和时间成本,前端同学也更期望只使用JavaScript就能实现这些功能。

脚手架核心价值

综上,前端脚手架存在意义重大。脚手架的核心目标是提升前端研发整个流程的效能。

  • 自动化。避免项目重复代码拷贝删改的场景;将项目周期内的Git操作自动化。

  • 标准化。快速根据模板创建项目;提供CICD能力。

  • 数据化。通过对脚手架自身埋点统计,将耗时量化,形成直观对比。

往往各个公司对于自动化标准化的部分功能Git操作、CICD都有实现一套完善的类似于代码发布管理系统,帮助我们在Gitlab上管理项目,并提供持续集成、持续部署的能力。更有甚者,针对小程序的项目也会对其进行代码发布管理,将其规范化。

我们可能就只需要考虑

  • 创建项目+集成通用代码

  • 常见痛点的解决方案(快速生成页面并配置路由...)

  • 配置(eslint、tsconfig、prettier...)

  • 提效工具(拷贝各种文件)

  • 插件(解决webpack构建流程中的某个问题...)

  • ...

下面则介绍我们在公司内部基于这些场景所做的尝试。

使用脚手架

首先在终端通过focus create projectName命令新建一个项目。其中focus表示主命令create表示commandprojectName表示command的param。然后根据终端交互去选择和输入最终生成项目。

5c55aeffa753a388781597151d8c58c9.gif

我们为各个BU、各个端、各个技术栈提供不同模板项目,于此同时,每个同学都能将小组内的项目沉淀并提炼成一个模板项目,并按一定规范集成到脚手架中,反哺整个BU。

@focus/cli架构

如下架构图,采用Ler

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值