2024年最全做好这三个关键点就可以更好的实现前端业务组件库,前端面试题集2024版

打开全栈工匠技能包-1小时轻松掌握SSR

两小时精通jq+bs插件开发

生产环境下如歌部署Node.js

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

网易内部VUE自定义插件库NPM集成

谁说前端不用懂安全,XSS跨站脚本的危害

webpack的loader到底是什么样的?两小时带你写一个自己loader

是什么

如果你选择把所有的组件看成一个整体,一起打包发布。这叫做单包架构。单个仓库,单个包,统一维护统一管理。比如Antd

000.jpg

优点

它最大的优点是可以通过相对路径实现组件与组件的引用,公共代码之间的引用。

缺点

缺点就是组件完全耦合在了一起,必须把它作为一个整体统一发包。就算只改一个组件的一个非常小的功能,都要对整个包发布更新。


比如说 Antd,它就是作为一个整体的包来尽进行管理的。选择使用单包架构的话,那么你就必须提供按需加载的能力,以降低使用者的成本,你可以考虑支持 ES Modules 的 Tree shaking 的功能来实现按需加载的能力。当然你也可以选择另外一种方案,叫做"多包架构"

多包架构

是什么

每个组件彼此独立,单独打包发布,单个仓库多个包,统一维护单独管理。

.

├── lerna.json

├── package.json

└── packages/ # 这里将存放所有子 repo 目录

├── project_1/  # 组件1的包

│   ├── index.js

│   ├── node_modules/

│   └── package.json

├── project_2/   # 组件2的包

│   ├── index.js

│   ├── node_module/

│   └── package.json

复制代码

优点

它最大的优势是组件发布灵活,并且天然支持按需使用,

缺点

缺点就是组件与组件之间物理隔离。对于相互依赖,公共代码抽象等场景,就只能通过NPM包引用的方式来实现。

在这些场景下的开发统一发布,相对来说没那么方便,多包架构在业界称之为 “Monorepo”.

阿萨德阿斯蒂芬斯蒂芬.jpg

在前端领域,我们一般使用第三方库 Lerna 来维护这样的架构,Lerna针对包之间有依赖的场景做了一些特殊优化,开发模式下,它会把所有存在依赖关系的包通过软链的形式连在一起,就可以很方便的本地开发联调。所以这就要求你考虑清楚,

  • 组件库之间的组件是否有相互依赖的情况,如果有这种情况,就可以通过Lerna来进行处理

  • 如果组件之间依赖特别验证,也可选择"单包架构"

二. 业务组件库的基础技术能力


当你确定了整体架构之后,就可以开始具体的功能点实现了。业务组件库要求整体框架提供五点基础的技术能力

1. 构建能力

这需要我们可以提供构建产物的能力,这里有很多选择,可以选择Webpack,Rollup Glup Grunt… 构建组件库推荐Rollup, 构建项目推荐Webpack. 这里需要特别注意产物的格式要求,像我们常用的cjs, esm,umd格式。

  • 比如说如果你的组件考虑支持 node环境, 像需要支持ssr, 你就需要打包出 cjs格式的代码

  • 如果你的组件考虑支持 <script > 标签引用,, 你就需要打包出 umd格式的代码

然后就需要在对应的构建工具里进行配置

除此之外,还有几个非常容易遗漏的点,比如说

  • 组件库Bable的配置是否与项目中Babel的配置重复

  • 依赖包是打包到产物中,还是使用项目中的依赖包。如:lodash, moment…

  • 依赖包的样式是否打包到产物中以及Polyfill的配置(这里以后再开一篇详细说明吧???)

2. 文档

你需要提供一个可以实时运行的文档服务。包括支持静态内容的展示,以及可以查看源码的实施运行效果,这方面有很多优秀的开源库,比如 StoryBook&Styleguidist,Docz

这里你需要注意一个典型的错误行为,那就是调研的时候,只调研一些基础的功能就开始做选择,这样很容易给后面挖坑,你需要考虑尽可能多的情况。比如

  1. 有内部状态的代码示例能不能支持,例如弹窗类的组件,就需要在示例中做显示状态的切换

  2. 如果考虑放移动端组件,那么展示效果能不能支持,一般来说,移动端的示例,应该是通过iframe的形式运行在一个独立的页面里面。比如说,fiexd定位的移动端组件是很常见的一种形式,如果不是iframe,fiexd定位的元素会铺满整个文档网页

20210318162405.jpg

  1. 文档网站的依赖包跟组件的依赖包会不会冲突。假设两个依赖包版本不一致的时候,需要实现一个样式的隔离

3. 本地服务

业界一般都是用文档服务来当本地服务的。启动本地的文档服务就可以查看运行的效果。这里你需要关注的是,本地服务的使用体验好不好,比如

  • 说有没有热更新

  • 编译速度够不够快

还有一个比较特别的点,有时候我们会在本地执行build构建。构建的产物跟本地生成的临时产物要能够做到相互隔离,互不影响

4. 质量保证

一方面我们需要提供统一的eslint功能。保证基础的实现风格和质量

另一方面可以考虑引入单元测试的能力,业界也有很对优秀的单测框架,如Jest ,Karma

常用的JavaScript设计模式

  • 单体模式

  • 工厂模式

  • 例模式

函数

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值