一款基于 Web Components 的轻量前端开发框架

0 阅读3分钟

Webcore 前端原生开发框架

简介

Webcore 是基于 原生 Web Components 标准设计的一套前端运行时与开发框架。 它围绕「服务化架构 + 组件系统 + 路由系统 + 事件系统」构建,为浏览器环境提供一套轻量但完整的前端基础设施,让你在不依赖大型三方框架的前提下,依然可以用统一、可维护的方式开发中小型 Web 应用。

框架优势

  1. 原生优先、长期可用。
  • 完全建立在浏览器原生能力之上,无需构建工具,不绑定任何框架生态,官方标准,长期支持。
  • 天然支持样式隔离、热重载、模块化、远程加载、懒加载等。
  • 完全基于原生能力的封装,不创造新语法,会原生开发即可上手,学习成本低。
  1. 服务化架构,清晰可扩展。
  • 所有能力都抽象为服务:组件、路由、事件等,由服务容器统一管理和注入。
  • 组件既是服务,各个组件可以独立开发,独立部署,独立维护。
  • 支持微服务,各个服务和组件互相独立,又可通过接口相互通讯。
  • 支持插件拓展,按需安装服务或组件,无限拓展。

文档说明

框架使用方法,请点击首页:https://beker.picp.vip/webcore

源码地址 Github: github.com/webcore-fra…

组件结构

export default class MyComponent extends webcore.component.builder {

    static tag = 'my-component';                    // 必须:组件标签名
    static observedAttributes = ['title'];          // 可选:要监听的属性

    create() {
        this.styles('/styles/base.css')             // CSS 字符串或 URL
        // .styles('/components/my/style.css')      // 按顺序添加多个 CSS 
        // .styles('.root {color: red}')
        .template('/components/my/my.html')         // HTML 字符串或 URL
        .mode('closed')                             // Shadow DOM 模式:'open' | 'closed'
        .inject(['event', 'http', 'router'])        // 要注入的服务
        .configuration({                            // 组件配置(可选)
            data: true,
        });
    }

    // 生命周期钩子(按需实现)
    onCreated(){}                 // 初始模板/样式/服务准备完毕,但未挂载
    onBeforeMount(){}             // 即将挂载
    onConnected(){}               // 元素插入到 DOM 中
    onMounted(){}                 // 完全挂载完毕
    onDisconnected(){}            // 元素从 DOM 中移除

    // 属性变化
    onAttributeChanged(attr, newVal, oldVal){}      // 需开启 observedAttributes

    // 被移动到新的文档
    onAdopted(){}

    // 开启路由时(见路由系统)
    onBeforeRoute(route){         // 路由之前
        return true
    }
    onRouted(route){}             // 路由之后
}

项目案例

音乐播放器:https://beker.picp.vip/music

这是用 webcore 框架开发的一个音乐播放器,同时适配桌面端和移动端,响应式布局。这个播放器说明原生组件也可以写出复杂的web应用。

拓展延伸

Webcore 框架可以与任何其他框架搭配使用,比如它的组件在注册后可以在 React或 Vue 中直接使用,webcore 的事件系统可以与 Vue 搭配使用,简化 Vue 的组件通讯,也可以使用其他框架做组件开发,把 webcore 当作工具使用。

不足之处

  1. 插槽问题:原生组件因为样式的强隔离,插槽问题一直是绕不过的难题,目前的插槽功能支持非常有限,只能支持插槽内顶层元素的样式控制,深层元素的样式控制不了。(目前的想法是抛弃官方的方法,在创建组件的时候,把插槽的元素移动到组件内部指定位置)。

  2. 数据响应式: 由于设计的初衷就是原生框架,所以并没有强大的数据响应式系统,没有使用虚拟DOM等主流框架的技术,只实现了简单的数据响应式。框架把对DOM的操作完全交给开发者,由开发者精细控制DOM更新等数据响应式操作。

总结

框架架构基础虽已搭建好,剩下的就是添砖加瓦,但原生组件还有许多不足之处,虽比不上主流框架(React、Vue等)的强大与完美,但起码说明这是一个好的起点,说明原生开发也能行,随着官方标准的推进和原生技术的完善,原生组件也有望在未来大放异彩,或者也能为前端开发多出一种选择。