Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

组件化的一些坑

  一个组件化到极致的项目大概就是将自己的所有东西都作为组件分层次地放在多个仓库中,这些组件自己维护它们之间的层级关系和依赖关系。最用由作为终端组件的页面将这些子组件组合起来渲染给用户。这样组件化到极致后,项目结构就非常清晰,而且组件的复用性也很强。
  这样的世界看起来虽然很美好,但实际开发过程中也会遇到很多问题。
  如果组件的质量不高或缺乏测试的话,业务开发时就会遇到大量组件的 Bug。而且由于组件层叠依赖的缘故,这些组件的 Bug 会很难定位。如果遇到需要紧急修复的线上 Bug,这时候定位到一个组件内的 Bug,而这个组件是另一个开发人员写的完全看不懂的代码,这时候就要苦逼了。
  即便修复了组件的 Bug,如果这是一个底层组件,那么一直到页面层的每一层组件都要发布一个版本来升级自己所依赖的组件,这个过程也是非常麻烦的。当然,还有一种解决方案是使用语义化版本号自动升级依赖,这样只要发布组件和业务就可以解决,然而这还是得发布两个东西。
  使用语义化版本自动升级的前提是安装时 build 组件,也就是说组件不能直接打 dist 包。如果组件打 dist 包,它本身就不会应用上自动升级的东西。而组件要在安装时 build 就需要在自己安装时把 devDependencies 也安装上,并在 install 时执行打包任务。这些是非常耗时的过程。
  抛开自动升级的各种阻碍,就自动升级这件事而言本身就是有问题的。如果一个组件的依赖是自动升级的,那么子组件可能为了修复某个 Bug 而发布了一个版本导致了另一个 Bug,线上就会莫名其妙地挂掉。而且还无法从版本的 change 中找出挂掉的原因。因为子组件是悄悄地升级。而且如果发布系统不会保留每个版本的最终包而是每次重新打包的话,甚至会造成这样的 Bug 无法回滚。
  以上这些只是目前我看到的比较恶心的问题,还有很多问题我一下也总结不出来。反正组件化这件事听起来虽然美好,但里面也充满着坑。
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^