rpose

0.9.1 • Public • Published

rpose

NPM version License

《RPOSE从入门到精通》在哪里?

没有的事,这是一个前端框架,简单到没法聊


Documents


有好姿势欢迎提建议

青松的姿势

Hello world
// hello-world.rpose
[view]
<span>hello {name}!</span>

[state]
{name: 'world'}

[mount]
body

live demo

todo-list
// todo-list.rpose
[view]
<div>
    <div class="title">TODO LIST</div>
    <ul>
        <li @for="(item, index) in $state.items" @key={index}><button style="margin-right:20px" onclick={ ()=>this.del(index) }>Del</button> {item}</li>
    </ul>
    <form>
        <input type="text" @ref="input">
        <button>Add #{ $state.items.length + 1 }</button>
    </form>
</div>

[state]
{
    items: []
}

[methods]
@action('submit', 'form')
add(e) {
    e.preventDefault();
    let el = this.getRefElement('input');
    if ( el.value.trim() ){
        let items = this.#private.state.items;
        items.push(el.value) && (el.value = '');
        this.render();
    }
}

del(index) {
    this.#private.state.items.splice(index, 1);
    this.render();
}

[css]
.title {
    font-size: 18px;
}

[mount]
body

live demo

layout (@class)
// layout-foo.rpose
[view]
<div @class="height-100vh display-flex flex-direction-column overflow-hidden color-#333">
    <div @class="height-50px color-#fff bgcolor-#555"><slot name="header"/></div> 
    <div @class="height--calc(100vh_-_80px) bgcolor-#eee"><slot name="body"/></div> 
    <div @class="height-30px bgcolor-#d5d5d5"><slot name="footer"/></div> 
</div> 

[less]
body{
    margin: 0;
}
// page-foo.rpose
[view]
<layout-foo>
    <div slot="header">
        <div @class="text-align-center padding-top-13px">Header</div>
    </div> 
    <div slot="body">
        <div @class="margin-top-150px text-align-center font-size-3rem">Content</div>
    </div>
    <div slot="footer">
        <div @class="text-align-center padding-top-3px">Footer</div>
    </div> 
</layout-foo> 

[mount]
body

live demo

bootstrap-button (csslibify)
// csslibify-bootstrap-button.rpose
[view]
<button type="button" class="btn@bootstrap btn-primary@bootstrap">
    this is a bootstrap primary button
</button>

[csslib]
bootstrap = bootstrap:**/*.min.css

[mount]
body

live demo


安装使用


功能列表

feature

  • 源文件使用BTF的单文档格式,人性化强,可读性高
  • 数据驱动、组件式、响应式、声明式的开发过程
  • 提供指令@ref@key@show@if@for@taglib@csslib@class@html@text@merge
  • 提供组件级和项目级的[taglib]配置,和@taglib有影响范围区别
  • 提供组件级和项目级的[csslib]配置,和@csslib有影响范围区别
  • 项目可发布为npm模块,发布内容为项目配置及源码和资源,开发工程可直接引用自动安装按需编译使用
  • 提供简易安全的路由方案
  • 提供样式风格模块化方案
  • 提供预渲染模块化方案
  • 提供简易的SVG图标方案
  • 支持以装饰器方式(效果如同Java注解),声明绑定事件
    [methods]中的方法,支持@action(事件名, 选择器)的方式绑定事件
    选择器仅在组件范围内编译期有效,参考样式的标签选择器语法使用
    选择器选中的是标准标签时,效果等同直接在标准标签上写事件属性绑定方法
    选择器选中的是组件标签时,效果等同直接在组件标签上添加属性指向方法

buildin

  • 语法高亮组件,写法雷同md的 ```,支持btfrpose,支持设定最大高度
  • 内置路由组件<router><router-link>
  • 内置标签组件 <if>
  • 内置标签组件 <for>
  • 内置图标组件 <svgicon>
  • 内置组件写法 <@svgicon>等同 <svgicon>
  • 内置组件写法 <@router>等同 <router>
  • 内置组件写法 <@router-link>等同 <router-link>

runtime

  • 虚拟DOM及局部差异化渲染实现
  • 提供onatonceoff等事件接口
  • 提供$$接口,方便dom节点选择及属性修改操作
  • 支持相对特殊的<svg><script><link>标签
  • 使用代理事件,event.targetNode存放当前事件节点
  • 差异渲染时支持事件更新
  • 添加rpose.zindex(num)方法接口,以支持动态计算z-index

compiler

  • 编译模块插件化便于增减新功能
  • 组件接口属性需在[api]中显式声明,方便人工阅读识别
  • 自动安装配置依赖模块,增强开发体验,有特定版本需求时需自行安装确定版本
  • 标签属性支持单纯对象表达式,如<foo {$state}>,运行期会按接口声明复制属性
  • 标签插槽功能支持
  • 不推荐,但确实可以在view中写js代码
  • [view]中支持变量简写,自动检查接口声明进行关联
  • [methods]中使用类方法的方式写事件函数,支持私有属性私有方法
  • [methods]中支持自定义同名函数替代框架的默认实现
  • [methods]中支持用装饰器的方式绑定事件处理,支持标签选择器语法
  • [methods]中的变量在编译期做检查,有使用未定义变量则定位报错
  • [methods]中支持定义mounted方法,有定义时在组件挂载完成后将被异步调用
  • 自动哈希化js代码中样式选择器的类名
  • 自动处理使this指向组件对象
  • 友好化错误信息提示,编译错误时准确定位
  • 源文件中无[mount],或文件目录含componentsnode_modules的都视为单纯组件
  • 源文件名过滤,不同目录的重名文件仅一个有效,检查并提示忽略的文件
  • 支持特殊的CDATA标签写法,方便直接书写尖括号等特殊字符
  • 自动删除纯注释代码块,删除空白文本表达式或纯注释文本表达式
  • 监视模式下,处理好文件重名问题,自动编译关联组件页面,按需热更新浏览器
  • 支持LESS预处理
  • 支持SCSS预处理
  • 样式类名哈希化解决冲突问题,非release模式时仅友好改名以便确认
  • 自动转换js代码中的样式类名并统一哈希化
  • 在js代码中的样式类名,支持自动按需引用样式库
  • 样式中url的相对目录自动调整,图片资源文件名统一哈希化
  • 自动调整img标签中src的相对目录,让不同目录页面都能正常显示图片
  • .browserslistrc配置添加前缀、压缩或美化等样式后处理
  • 打包后的图片资源存放目录可通过项目配置文件rpose.config.btf配置,默认是images
  • .browserslistrc配置的目标浏览器直接打包成品
  • 非release模式时,编译的组件代码输出到临时目录便于确认
  • 使用基于磁盘文件的缓存,缓存目录可配置化
  • 支持页面[api]中声明为移动优先或桌面优先,默认为移动优先(desktopFirst=false)
  • 同一节点支持多个事件声明,编译期按事件类型名自动合并
  • 错误信息对比定位提示,同一文件则自动合并提示
  • 配置文件rpose.config.btf中支持设定监视模式的端口,默认3700,设为random即随机
  • 图标组件 <svgicon>inline模式下,允许按名称动态使用当前工程下的SVG图标
  • 图标组件 <svgicon>自动添加缺省属性fill='currentColor',有自定义时使用自定义值
  • 增加组件的私有方法#getState#setState方法,无[api]接口限制,方便组件内部使用
  • [taglib]可使用~表示引用当前工程内的组件,如 @my-tag = ~
  • 当前工程内的组件引用可使用@开头的默认别名,如 <@my-tag>等同<my-tag>
    这有时会很方便,比如在开发期间[taglib]内可以不配置,需要更换为第三方组件时再配置即可
  • 编译期检测require方法调用,自动安装代码中依赖的第三方包

other

  • 简易实现热刷新服务器替代第三方包,方便按需刷新、按需打开窗口
  • 可通过配置样式库实现按需引用normalize样式
  • 监视模式下修改.browserslistrc文件,重新编译全部页面
  • 监视模式下修改rpose.config.btf文件,重新编译整个项目
  • 监视模式下修改<svgicon>用到的图标文件,重新编译可能相关的组件及页面
  • 监视模式下修改用到的图片文件,重新编译相关的组件及页面
  • 监视模式下修改本地样式库用到的css文件,重新编译相关的组件及页面

变更列表

Ver 0.9.*
  • 编译期检测require方法调用,自动安装代码中依赖的第三方包
Ver 0.8.*
  • 内置图标组件 <svgicon>inline-symbol模式下,允许按名称动态使用当前工程下的SVG图标
  • 内置组件写法 <@svgicon>等同 <svgicon>
  • 内置组件写法 <@router>等同 <router>
  • 内置组件写法 <@router-link>等同 <router-link>
  • [methods]中支持定义mounted方法,有定义时在组件挂载完成后将被异步调用
  • 增加组件的私有方法#getState#setState方法,无[api]接口限制,方便组件内部使用
  • [taglib]可使用~表示引用当前工程内的组件,如 @my-tag = ~
  • 当前工程内的组件引用可使用@开头的默认别名,如 <@my-tag>等同<my-tag>
    这有时会很方便,比如在开发期间[taglib]内可以不配置,需要更换为第三方组件时再配置即可
  • 添加rpose.zindex(num)方法接口,以支持动态计算z-index
  • 改进类名策略,避免组件类名和系统内置类名之间的冲突,支持更具语义的组件命名
Ver 0.7.*
  • 差异渲染时支持事件更新
  • 新增指令@key,作用类似vue的:key或react的key
  • 新增指令@html,类似innerHTML的作用,谨慎使用
  • 新增指令@text,类似innerTEXT的作用
  • 优化虚拟节点函数,令其更精简
  • 优化runtime
  • 新增指令@merge,针对特定标准标签的特殊场景,提供简化写法
    比如input标签输入变更后,有时想把输入值写入state但又不想触发渲染,通常需要写onchange实现,数量一多就变得繁琐,这时可以简化的用@merge="fieldname"达到目的
  • 配置文件rpose.config.btf中支持设定监视模式的端口,默认3700,设为random即随机
Ver 0.6.*
  • [methods]中使用类方法的方式写事件函数,支持私有属性私有方法
  • [methods]中支持自定义同名函数替代框架的默认实现
  • [methods]中支持用装饰器 @action的方式绑定事件处理,支持标签选择器语法
  • [methods]中的变量在编译期做检查,有使用未定义变量则定位报错
  • 错误信息对比定位提示,同一文件时自动合并,信息提示更加精准友好
  • @class增加伪类原子样式支持,如focus:bg-yellow
  • 使用代理事件,event.targetNode存放当前事件节点,同一节点支持多个事件声明,编译期按事件类型名自动合并
Ver 0.5.*
  • 新增指令@class,支持以灵活的原子方式书写样式
  • 内置SVG图标组件 <svgicon>
  • 指令@show添加修饰符支持,如@show.flex
  • 优化样式库编译缓存,提升编译性能
  • 监视模式下修改本地样式库用到的css文件,重新编译相关的组件及页面
Ver 0.4.*
  • 为方便功能删减修改,咬牙重构,编译器插件化,分离runtimebuildin模块
  • 更多的编译期检查以及更友好的错误信息提示
  • 新增指令@for,新增内置标签<for><if>
  • 新增支持特殊的CDATA标签写法,方便直接书写尖括号等特殊字符
  • 改进内置的语法高亮组件,增加btf、rpose语言类型的语法高亮显示支持
  • 项目以源码形式发布到npm,开发工程能自动安装依赖模块,按需编译相关组件
  • 解决watch模式下文件重名等可能引起动态编译错误的问题
  • 情不得已,简陋实现热更新服务器替换第三方包,按需刷新按需开窗口,改善体验
  • 优化编译缓存,提升编译性能,缓存可序列化,缓存目录可配置化
  • 按需引用normalize样式,间接的可通过配置样式库实现
  • 用语法树分析的方式,更安全的哈希化js代码中样式选择器的类名
  • 在js代码中的样式类名,支持自动按需引用样式库
  • 支持页面[api]中声明为移动优先或桌面优先,默认为移动优先(desktopFirst=false)
  • 监视模式下修改.browserslistrc文件,重新编译全部页面
  • 监视模式下修改rpose.config.btf文件,重新编译整个项目
Ver 0.3.*
  • 新添指令@taglib@csslib,组件支持[taglib][csslib]块定义
Ver 0.2.*
  • 指令统一前缀为@以方便识别,如 @if@ref@show
Ver 0.1.* 概念版
  • 源文件使用BTF的单文档格式,人性化可读性强,增强开发舒适性
  • 数据驱动、组件式、响应式、声明式的开发过程
  • 回归自然,三驾马车HTML/JS/CSS,写业务,完成
  • 控制框架接口概念复杂度,保持简易性,杜绝过度开发
  • 虚拟DOM及局部差异渲染
  • 框架上集成样式的预处理及后处理操作,同一解决样式类名冲突问题
  • 提供组件样式风格统一性方案
  • 提供简便易用的前端路由方案
  • 提供预渲染方案,用以灵活应付Loader或骨架屏等需求
  • 提供源监视功能,源文件修改时自动编译,热更新浏览器
  • 集成打包功能,按目标浏览器配置,直接按需打包成品

LIST

Package Sidebar

Install

npm i rpose

Weekly Downloads

1

Version

0.9.1

License

MIT

Unpacked Size

19.2 kB

Total Files

5

Last publish

Collaborators